js new 执行细节

2019-02-14  本文已影响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()的效果

上一篇下一篇

猜你喜欢

热点阅读