NEW一个构造函数时发生了什么?如何手写一个new

241 阅读1分钟

NEW一个构造函数时发生了什么?

  1. 创建了一个新对象{}
  2. 将新对象的_proto_指向构造函数的prototpye,新对象可以通过_proto_访问原型对象
  3. 将this指向新创建的函数对象
  4. 若是构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;若是 return 一个引用类型,则返回这个引用类型。

手写NEW

function myNew(fnc, ...args){
    let obj = new Object()     //创建了一个新对象{}
    obj._proto_=fnc.prototype  //将新对象的_proto_指向构造函数的prototpye
    let res = fnc.call(obj,...args) //将this指向新创建的函数对象
    return res instanceof Object?res:obj
}