JavaScript 中不能像 C++ / Java 那样定义类,但可以直接创建对象。以下介绍三种常用的对象创建方式,以及原型(Prototype)和继承的基本用法。
创建对象
1. 字面型对象
通过 key: value 的形式直接描述对象的属性和方法:
var Person=
{
name:"hk",
age:20,
print:function()
{
console.log("name is "+ this.name + " age is "+this.age);
}
}
var p=Person;
p.age=15;
p.print();
2. Object.create(ARG)
函数 Object.create 可以在已知对象的基础上创建一个新对象,新对象以原对象为原型:
var Person={
name:"hk",
age:20,
print:function()
{
console.log("name is "+ this.name + " age is "+this.age);
}
}
var p=Object.create(Person);
p.age=15;
p.print();
Person.print();
3. 构造函数(类似 C++ / Java 的方式)
使用 new 关键字调用构造函数来创建对象:
function Person(name,age){
this.name=age;
this. age=age;
this.print=function()
{
console.log("name is "+ this.name + " age is "+this.age);
}
}
var p=new Person("hk",20);
p.print();
原型(Prototype)
Prototype 可以为对象扩展函数和属性,也是实现继承的基础(类似 Lua 中的 metatable)。通过 prototype 添加的属性和方法对所有实例共享:
function Person(name, age) {
this.name = name;
this.age = age;
this.print = function () {
console.log("name is " + this.name + " age is " + this.age);
}
}
var p = new Person("hk", 20);
Person.prototype.growUp= function()
{
this.age++;
}
Person.prototype.address = "12346";
p.growUp();
p.print();
console.log(p.address);
继承
在 cocos2d-js 中,可以利用 cc.Class.extend 实现继承:
var MapData=cc.Class.extend(
{
...
});
var MapUI=MapData.extend(
{
...
});