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