NEW一个构造函数时发生了什么?
- 创建了一个新对象{}
- 将新对象的_proto_指向构造函数的prototpye,新对象可以通过_proto_访问原型对象
- 将this指向新创建的函数对象
- 若是构造函数没有 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
}