使用JavaScript模拟一般物件导向语言:模拟class的机制
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),就像是一般的物件导向语言那样。