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(
{
...
});