```javascript
function Person(name) { this.name = name }
Person.prototype.getName = function () { return this.name }
var ObjectFactory = function () { // 创建一个对象 var obj = new Object() // 返回第一个参数作为构造函数 var Constructor = [].shift.call(arguments) // 将构造函数的原型复制于对象的原型 obj.__proto__ = Constructor.prototype // 调用构造函数,并将obj 作为this, arguments作为参数 var ret = Constructor.apply(obj, arguments) // 如果构造函数里返回一个对象的话,就直接返回,否则我们就返回this即new创建的对象 return typeof ret === 'object'? ret: obj }
var a = ObjectFactory(Person, 'sven') console.log(Object.getPrototypeOf(a) === Person.prototype)
// 效果等效 var a = ObjectFactory(Person, 'sven') var a = new Person('sven ')
如果构造函数用return 显示的返回一个对象,那么new之后,会返回这个对象。 如果构造函数不显示的返回任何数据,或返回一个非对象类型的数据,则默认返回this指定的对象。即构造函数生成的对象。
``` https://www.jianshu.com/p/60d1b79974bd