new 操作符具体干了什么

299 阅读1分钟
    function Func() {
    }
    let func = new Func()
  • 创建一个空的的对象
    let obj = new Object()
  • 链接到原型

    把obj的proto指向构造函数Func的原型对象prototype,此时便建立了obj对象的原型链:obj-> Func.prototype->Object.prototype-null

    obj.__proto__ = Func.prototype

  • 绑定this值(让Func中的this指向obj,并执行Func的函数体)
    let result = Func.call(obj)
  • 返回新对象

    判断Func的返回值类型: 如果无返回值或者返回一个非对象值,则将obj作为新对象返回;否则会想result作为新对象返回

    if(typeof(result) == 'object') {
        func = result
    }else {
        func = obj
    }
    

www.jianshu.com/p/a69d7374f…