new的原理
- 创建一个对象obj。并将此对象的原型设置为构造函数的原型
- 将传入的构造函数的this指向obj。并执行构造函数。返回为constructor执行后的情况ret
- 如果返回不是对象,则需要将obj返回。如果是对象,则将ret返回。
function NewFn(constructor, ...rest) {
//创建一个对象。并将此对象的原型设置为构造函数的原型
let obj = Object.create(constructor.prototype);
//将传入的构造函数的this指向obj。并执行构造函数。返回为constructor执行后的情况
let ret = constructor.apply(obj, rest);
//如果返回不是对象,则需要将obj返回。如果是对象,则将ret返回。
return typeof ret === 'object' ? ret : obj;
}
执行
function Person(name){
this.name = name;
console.log(this.name);
}
let zhangsan = NewFn(Person, ' zhangsan');
console.log(zhangsan);