JavaScript不同于一般的物件导向语言,语法本身采用的是原型继承(prototype)的方式在实践物件导向机制的,如果要模仿一般物件导向语言,可以这样做:

var Class = function () {
    var klass = function () {
        //this this refers to any caller invokes for instanclize, in this case, man
        this.init.apply(this, arguments);
    };
    klass.prototype.init = function () {
        console.info('Default Init()');
    };
    return klass;
};
 
//Create a new Class
var Person = new Class();
var man = new Person();
 
有了这个概念后,就可以继续往下发展,使用这个美妙的类别模拟一些资料结构:
var Class = function () {
    var klass = function () {
        //this this refers to any caller invokes for instanclize
        this.init.apply(this, arguments);
    };
    klass.prototype.init = function () {
        console.info('Default Init()');
        for (var col in arguments[0]) {
            this[col] = arguments[0][col];
        }
    };
    return klass;
};

//Create a new Class
var Person = new Class();
//Attributes:
Person.gender = '';
Person.name = '';

var man = new Person({
    gender: 'male',
    name: 'Bob'
}),
    woman = new Person({
        gender: 'female',
        name: 'Mary'
    });
console.dir(man);
console.dir(woman);
使用jFiddle实际执行看看,就会看到man与woman各代表了不同的物件,而在一开始klass里的this也指向到了不同的实体(instance),就像是一般的物件导向语言那样。
相关文章