内置[[call]]和[[构造]]算法理解



9.3.1 [[call]](thisargument,gragmentsList(

  1. 让结果是以实现定义的方式评估F的结果,该记录符合符合f的规范。此argument是此值提供命名的参数,newtarget值不确定。

9.3.2 [[construct]](gragonmentslist,newtarget(

  1. 让结果是以实现定义的方式评估F的结果,该记录符合符合f的规范。该值是非初始化的,参数列表提供命名的参数,NewTarget提供NewTarget价值。

您能向我解释这些建议的含义吗?我知道Completion Record是什么。如何理解句子的这一部分: result of evaluating F in an implementation-defined manner that conforms to the specification of F

以符合F

规范的实现方式评估F的结果

开始,此行在第9.3.1节和第9.3.2节中。在这里考虑上下文很重要。如果您查看第9.3节的摘要

本规范中定义的内置函数对象可以用作Ecmascript函数对象(9.2(,其行为是使用ecmascript代码或实现提供的函数exotic对象,其行为是以其他方式提供的。无论哪种情况,调用此类功能的效果都必须符合其规格。

这是关键部分。当您的引用线说"实现定义"时,它在此处指的是。

例如,可以在C 或JS引擎执行的任何其他语言中实现一个函数。所需的只是该函数执行规范指定的操作。但是,它不必在JS本身中实现。

如果规范描述了这一点,那么评估的描述在哪里?

由于本节是关于"内置功能"的,此处的行为是JS功能规范行为的任何地方。例如,如果我们查看第17节,则指出:

除非另有说明,否则在此规范中定义的每个内置函数都是通过调用create builtinfunction抽象操作(9.3.3(。

来创建的。

因此,规格中定义的任何函数都具有此实现定义的行为。例如,Object.prototype.hasOwnProperty是实现定义的。这些步骤是

  1. 让P是吗?topropertykey(v(。
  2. 让O?toobject(此值(。
  3. 返回?HasownProperty(O,P(。

但是,只要发生这些步骤,这些步骤实际上是不重要的。

最新更新