js手写new方法

1.new操作符做了什么?

        在我们编程的过程中,可能经常使用new操作符,那么如果要手写new方法,就必须要知道它的作用,它的作用可以分为如下几点:

        1、创建一个新的空对象

        2、把这个新的空对象的隐士原型(__proto__)指向构造函数的原型对象(prototype)

        3、把构造函数中的 this 指向新创建的空对象并且执行构造函数返回执行结果

        4、判断返回的执行结果是否是引用类型,如果是引用类型则返回执行结果,new 操作失败,否则返回创建的新对象

2.实现new方法

        既然已经知道了new操作符的作用,那么就按照这几点去实现它的功能即可,直接上代码:

function myNew(Fn,...args){
    // 1、创建一个空的对象
    let obj = {}; // let obj = Object.create({});
    // 2、将空对象的原型prototype指向构造函数的原型
    Object.setPrototypeOf(obj,Fn.prototype); // obj.__proto__ = Fn.prototype 
    // 以上 1、2步还可以通过 const obj = Object.create(Fn.prototype) 实现
    // 3、改变构造函数的上下文(this),并将参数传入
    let result = Fn.apply(obj,args);
    // 4、如果构造函数执行后,返回的结果是对象类型,则直接将该结果返回,否则返回 obj 对象
    return result instanceof Object ? result : obj;
    // return typeof result === 'object' && result != null ? result : obj

}

猜你喜欢

转载自blog.csdn.net/m0_72838183/article/details/127174649