minjs1cn / weekly-learning

每周学习分享打卡
0 stars 0 forks source link

35 -【经典面试】JS实现一个new #35

Open xieshiyi opened 3 years ago

xieshiyi commented 3 years ago

https://github.com/mqyqingfeng/Blog/issues/13

wucuiping commented 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;
 }