js new 执行细节
2019-02-14 本文已影响0人
拉面的无聊时光
new 的官方定义
主要是里面的三句话
当代码 new
Foo
(...)
执行时,会发生以下事情:
-
一个继承自
Foo
.prototype
的新对象被创建。 -
使用指定的参数调用构造函数
Foo
,并将 this绑定到新创建的对象。new *Foo*
等同于new
Foo
()
,也就是没有指定参数列表,Foo
不带任何参数调用的情况。 -
由构造函数返回的对象就是
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()
的效果