总结特点
- 通过new运算符和构造函数(用Constructor代替) 创建并返回一个引用值
- 若构造函数返回的是引用值(null是历史遗留问题 typeof null === 'object'),则返回的
该引用值
- 反之,返回的Object,该对象通过Constructor来初始化属性,并且它的__proto__属性指向
Constructor.prototype
代码实现
function objectFactory() {
var obj = new Object()
var Constructor = Array.prototype.shift.call(arguments)
var res = Constructor.apply(obj,arguments)
obj.__proto__ = Constructor.prototype
return res ? (typeof(res) === 'object' | typeof(res) === 'function' ? res : obj) : obj
}
demo.prototype.Name = 'demo-prototype'
function demo(name,age) {
this.name = name
this.age = age
}
var d1 = new demo('d1',20)
var d2 = objectFactory(demo,'d2',18)
console.log(d1,d2)
console.log(d1.Name,d2.Name)