美文网首页
js new 执行细节

js new 执行细节

作者: 拉面的无聊时光 | 来源:发表于2019-02-14 11:36 被阅读0次

    new 的官方定义

    主要是里面的三句话

    当代码 newFoo(...) 执行时,会发生以下事情:

    1. 一个继承自 Foo.prototype 的新对象被创建。

    2. 使用指定的参数调用构造函数 Foo ,并将 this绑定到新创建的对象。new *Foo* 等同于 newFoo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。

    3. 由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建
      的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)

    new Func(args)
    
    转化成 代码即是:
    
    1. let obj = Object.create(Func.prototype)
    2. let res = Func.apply(obj,args)
    3  if(typeof res === 'object') return res 
        else return obj 
    
    

    细节 : 也就是说 构造函数内部 return 返回的数据是对象 , 则new 出来结果就是return 的数据, 否则是第一步创建对象
    作用: 当别人给你出面试题 new A() === A() 的时候 ,只要在构造函数里面返回唯一的对象就达到new A() === A()的效果

    相关文章

      网友评论

          本文标题:js new 执行细节

          本文链接:https://www.haomeiwen.com/subject/fvoseqtx.html