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

简介:

我们知道在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");
相关文章
|
1天前
|
设计模式 JavaScript 前端开发
JS 代码变量和函数的正确写法
JS 代码变量和函数的正确写法
17 2
|
22天前
|
数据采集 缓存 JavaScript
JavaScript递归函数的设计与优化
JavaScript递归函数的设计与优化
|
21天前
|
JavaScript
js 延时执行代码的最佳实践 —— 自定义 sleep 函数
js 延时执行代码的最佳实践 —— 自定义 sleep 函数
15 0
|
21天前
|
JavaScript 索引
js 类数组 转 数组
js 类数组 转 数组
19 0
|
22天前
|
JavaScript
js 高频实用函数封装汇总(持续更新)
js 高频实用函数封装汇总(持续更新)
18 0
|
23天前
|
JavaScript
js 数组移除指定元素【函数封装】(含对象数组移除指定元素)
js 数组移除指定元素【函数封装】(含对象数组移除指定元素)
15 0
|
23天前
|
JavaScript
js 调试 —— 断点(含进入函数、条件断点等)
js 调试 —— 断点(含进入函数、条件断点等)
24 0
|
10月前
|
JavaScript 前端开发 Java
JavaScript 高级2 :构造函数和原型
JavaScript 高级2 :构造函数和原型
70 0
|
JavaScript 前端开发
🍉JavaScript进阶——构造函数和原型
🍉JavaScript进阶——构造函数和原型
87 7
🍉JavaScript进阶——构造函数和原型
|
前端开发 JavaScript
前端javascript构造函数和原型(超详细讲解)
前端javascript构造函数和原型(超详细讲解)
121 0
前端javascript构造函数和原型(超详细讲解)