本文共 900 字,大约阅读时间需要 3 分钟。
我们知道在js中可以用一个函数来定义对象的类,该函数称之为对象的构造函数,我们在需要create对象的时候直接调用这个构造函数即可:
var Man = funciton(name){ this.name = name; };var man = new Man("hopy");
如上所示man对象的类是Man,因为有:
Object.getPrototypeOf(man) === Man.prototype; //true
但是我们同样可以写一个类的工厂方法,用它来生成一个对象,显然该工厂方法不能用new来调用:
function Man_f(name){ var props = { name:{value:name,enumerable:true,writable:true,configurable:true} }; return Object.create(Man_f.prototype,props);}var man_f = Man_f("hopy");
以上2个方法分开来写略显繁琐,那么有没有可能把以上2个方法合成一个方法呢?那是必须的 :)
以下代码将Man和Man_f方法合并成一个Man方法,利用了这样一个事实:在使用new调用的构造器中this指向该类的一个实例:function Man(name){ var props = { name:{value:name,enumerable:true,writable:true,configurable:true} }; if(this instanceof Man) Object.defineProperties(this,props); else return Object.create(Man.prototype,props);}//我们可以用任意一种方法来创建Man的实例var man0 = new Man("hopy");var man1 = Man("panda");
转载地址:http://upwbm.baihongyu.com/