数组算法有失败吗?/什么是NewTarget?



这个问题与数组构造函数算法有关。 https://tc39.github.io/ecma262/#sec-array-constructor-array

该算法的结果不太清楚:

    如果未定义 NewTarget,则让 newTarget
  1. 成为活动函数对象,否则让 newTarget 为 NewTarget。

这适用于我们将此构造函数作为函数调用并且活动函数对象为 null 的情况(当我们从脚本或模块下调用它时,它是null)。

转到行:

  1. 让原型成为?GetPrototypeFromConstructor (newTarget, "% ArrayPrototype%").

转到算法 GetPrototypeFromConstructor 并找到以下内容:

  1. Assert: IsCallable(构造函数)为真。

不能有空,因为是不可调用的。

我们得出一个结论:

  1. 我们误解了一些东西。
  2. 规格错误

这是怎么回事?

关于NewTarget是什么的令人困惑的一点,我认为是这个难题的关键。该规则的含义基本上是:

  • 如果Array作为普通函数调用,则newTarget的值是构造函数Array
  • 如果Array被调用为new Array,则newTarget的值也是构造函数Array

为什么? 好吧,当调用[[Construct]]操作时,第二个参数给出newTarget。对[[Construct]]操作的调用将构造函数本身作为该参数传递。但是,对Array的简单调用不涉及该操作;这只是一个普通的[[Call]].所以在这种情况下NewTargetundefined,所以规则说newTarget是"活动函数上下文"。 因为我们谈论的是Array构造函数中发生的事情,所以活动函数上下文显然是该函数;否则我们为什么要阅读规范的那一章?

为什么这样措辞? 我不知道。

相关内容

  • 没有找到相关文章

最新更新