function Person(name) {
this.name = name;
}
1. 创建一个空对象
var p = {}
2. 将p的原型指向构造函数的原型
p.__proto__ = Person.prototype;
3. 将this指向改为p
var res = Person.apply(p, args);
4. 处理返回值情况
如果构造函数有返回,返回值是一个基本数据类型,则忽略,直接返回p;如果返回值是一个引用数据类型 则返回的是该返回值
res instanceof Object? res: p
5. 总结
function createInstance(fn, ...args){
var obj = {};
obj.__proto__ = fn.prototype;
var res = fn.apply(obj, args);
return res instanceof Object? res: obj;
}