我想知道new
运算符是如何工作的,而不仅仅是学习如何使用它。我查看了ECMAScript 5 标准,发现算法描述了它是如何工作的,但对它的含义有点困惑。
生产
NewExpression : new NewExpression
评估如下:
- 让
ref
是评估 NewExpression 的结果。- 设为GetValue
constructor
(ref)。- 如果
Type(constructor)
不是Object
,则抛出TypeError
异常。- 如果
constructor
没有实现[[Construct]]
内部方法,则抛出TypeError
异常。- 返回调用
[[Construct]]
on 内部方法的结果constructor
,不提供任何参数(即一个空的参数列表)。
我尝试使用这个例子来理解上面的算法:
var f = function() {};
var h = new f();
特别是我不了解第一步,因此无法遵循其他步骤。
- 让
ref
是评估 NewExpression 的结果。
var h = new f();
~~~ ~~~~
| \_________ NewExpression
new operator
这是否意味着ref
的价值f()
?但它是undefined
。
3. 如果
Type(constructor)
不是Object
,则抛出TypeError
异常。
但是f
是函数的类型,会不会抛出TypeError
异常呢?
5. 返回调用
[[Construct]]
on 内部方法的结果constructor
,不提供任何参数(即一个空的参数列表)。
[[Construct]]
函数的内部属性,调用它是什么意思constructor
?