Open xieshiyi opened 3 years ago
new做了哪些事情: 1.new关键字会首先创建一个空对象 2.将这个空对象的原型对象指向构造函数的prototype属性,从而继承原型上的方法 3.将this指向这个空对象,执行构造函数中的代码,以获取私有属性 4.如果构造函数返回了一个对象,就返回该对象,如果返回值不是对象,就将创建的对象返回
function myNew(Fn,...args){
//1.创建一个空对象,并将对象的__proto__指向构造函数的prototype 这里两步一起做
const obj=Object.create(Fn.prototype);
//2.将构造函数中的this指向obj,执行构造函数代码,获取返回值
const res=Fn.apply(obj,args);
//3.确保构造器总是返回一个对象,也排除null
return typeof res === 'object' ? res||obj : obj;
}
https://github.com/mqyqingfeng/Blog/issues/13