javascript中如何让类工厂和构造函数变成同一个函数

来源:互联网 发布:java源文件的扩展名是 编辑:程序博客网 时间:2024/06/05 20:02

我们知道在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");
0 0
原创粉丝点击