// 构造函数
function Foo(name, age){
this.name = name;
this.age = age;
// new :若构造函数含return值且为一个对象,则构造的实例为return出来的对象
// return {};
}
function objectFactory(){
// 1.创建一个新的对象
const obj = {};
// 获取构造函数Foo
const Constructor = [].shift.call(arguments);
// 2.把obj的__proto__指向fn的prototype,实现继承
obj._proto_ = Constructor.prototype;
// 3.改变this的指向,执行构造函数,传递参数
let res = Constructor.apply(obj, arguments);
// 4.返回新的对象obj
return Object.prototype.toString.call(res) === '[object Object]' ? res : obj;
}
let f = objectFactory(Foo, 'wn', 18);
console.log(f.name, f.age); // wn 18