实现new 关键字

125 阅读1分钟

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);