js中new 的实现(原理分析)

  • Post author:
  • Post category:其他


关键字new在调用构造函数的时候其实执行了一下几个步骤:

1.创建对象

2.修改此对象的原型,让指向其传入的构造函数的原型对象

3.指向构造函数中的代码(为这个对象添加属性)

4.返回新对象

知道了原理,那我们就开始手动实现一个new吧

function  New(fn,...args){
        // 创建一个对象,其对象的原型,指向构造函数的原型对象
    let obj =Object.create(fn.prototype)


        // 指向构造函数中的代码,并修改this,指向obj
    let result= fn.apply(obj,args)


        // 构造函数本身如果返回的是对象的话,则 返回的就是此对象
        //    如果返回值不是对象的话,则 返回对应的obj
    return  result instanceof Object ? result:obj
}

function A(a,b){
    this.a=a
    this.b=b
}
const  d =New(A,1,2)

console.log(d.a);  //1
console.log(d.b); //2

注意:

new 构造函数, 如果此构造函数 有返回值,且返回值是对象的话,则就返回此对象本身。


所以最后判断一下,返回值是不是对象,如果不是,则返回obj



版权声明:本文为qq_48959471原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。