我想知道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?