javascript中如何让类工厂和构造函数变成同一个函数
2015-03-20 10:21
190 查看
我们知道在js中可以用一个函数来定义对象的类,该函数称之为对象的构造函数,我们在需要create对象的时候直接调用这个构造函数即可:
如上所示man对象的类是Man,因为有:
但是我们同样可以写一个类的工厂方法,用它来生成一个对象,显然该工厂方法不能用new来调用:
以上2个方法分开来写略显繁琐,那么有没有可能把以上2个方法合成一个方法呢?那是必须的 :)
以下代码将Man和Man_f方法合并成一个Man方法,利用了这样一个事实:在使用new调用的构造器中this指向该类的一个实例:
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");
相关文章推荐
- javascript中如何让类工厂和构造函数变成同一个函数
- javascript中如何让类工厂和构造函数变成同一个函数
- Javascript > JS中onmouseover时如何让鼠标指针变成一个小手状
- Javascript我学之六对象工厂函数与构造函数
- javascript 中的 prototype和constructor属性的使用(constructor属性始终指向创建当前对象的构造函数,每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数)
- JavaScript小技巧:如何检测一个函数是否是JavaScript原生函数
- JavaScript: 如何将一个字符串转换成对应的函数
- javascript中如何让一个参数的函数接受两个参数
- JavaScript中onmouseover时如何让鼠标指针变成一个小手状
- 如何在页面每次刷新的时候可以调用一个javascript写的函数
- JavaScript中onmouseover时如何让鼠标指针变成一个小手状
- javascript 如何判断元素是否包含一个特定的类,hasClass函数的实现
- javascript同一个事件如何注册多个处理函数
- 如何用javascript 的eval动态执行一个需要传对象参数的函数
- JavaScript中onmouseover时如何让鼠标指针变成一个小手状
- javaScript学习笔记——如何在加载完某个标签之后执行一个函数
- JavaScript中如何检测一个变量是一个String类型?请写出函数实现
- JavaScript中onmouseover时如何让鼠标指针变成一个小手状
- Javascript如何用一个优雅的姿势通过getStyle函数来获取元素的样式
- JavaScript中onmouseover时如何让鼠标指针变成一个小手状