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");
相关文章
|
6天前
|
JavaScript 前端开发
JavaScript 闭包:让你更深入了解函数和作用域
JavaScript 闭包:让你更深入了解函数和作用域
|
2天前
|
前端开发 JavaScript
前端 JS 经典:函数管道
前端 JS 经典:函数管道
5 0
|
5天前
|
前端开发 JavaScript
前端 js 经典:class 类
前端 js 经典:class 类
7 2
|
5天前
|
JavaScript
js中如何使用工厂方式和构造函数创建对象,web开发项目实例
js中如何使用工厂方式和构造函数创建对象,web开发项目实例
|
6天前
|
JavaScript 前端开发 网络架构
函数柯里化:JavaScript中的高级技巧
函数柯里化:JavaScript中的高级技巧
|
6天前
|
JavaScript 前端开发
JavaScript的`apply`方法:函数的“应用”与“调用”
JavaScript的`apply`方法:函数的“应用”与“调用”
|
6天前
|
JavaScript 前端开发
JavaScript的`bind`方法:函数的“复制”与“定制”
JavaScript的`bind`方法:函数的“复制”与“定制”
|
6天前
|
JavaScript 前端开发
JavaScript的`call`方法:实现函数间的调用!
JavaScript的`call`方法:实现函数间的调用!
|
3天前
|
存储 JavaScript 前端开发
从零开始学习Vue.js
Vue.js 是一种流行的前端框架,它使用简单,灵活且易于上手。如果你是一个前端开发者,并想要学习 Vue.js,本文将为您提供一个从零开始的指南。我们将探讨 Vue.js 的基础知识和常用功能,以及如何构建一个简单的 Vue.js 应用程序。
|
5天前
|
缓存 JavaScript 前端开发
JavaScript:get和post的区别,2024年最新3-6岁儿童学习与发展指南心得体会
JavaScript:get和post的区别,2024年最新3-6岁儿童学习与发展指南心得体会