9.3.1 [[Call]](thisArgument,argumentsList)
  
  
  令result为完成记录,它是按照与实现有关的实现定义的方式评估F的结果
  F的规范。thisArgument是this值,argumentsList
  提供命名参数,并且NewTarget值未定义。
  
  
  9.3.2 [[Construct]](argumentsList,newTarget)
  
  
  令result为完成记录,它是按照与实现有关的实现定义的方式评估F的结果
  F的规范。this值未初始化,argumentsList
  提供命名的参数,而newTarget提供NewTarget
  值。
  


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

最佳答案

以实现定义的方式符合F规范评估F的结果


首先,此行位于section 9.3.1section 9.3.2中。重要的是要在此考虑上下文。如果您查看the summary of section 9.3


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


这是关键部分。当您引用的行说“实现定义的”时,这里指的是这一点。

例如,可以使用C ++或执行JS引擎的任何其他语言来实现功能。所需要做的就是该功能执行规范指定的操作。但是,它不必在JS本身中实现。


  如果规范对此进行了描述,那么评估的描述在哪里?


由于本节是关于“内置函数”的,因此这里的行为是规范定义JS函数行为的任何地方。例如,如果我们查看section 17,它将指出:


  除非另有说明,否则本规范中定义的每个内置函数都是通过调用CreateBuiltinFunction抽象操作(9.3.3)来创建的。


因此规范中定义的任何功能都具有此实现定义的行为。例如,Object.prototype.hasOwnProperty是实现定义的。步骤是


  
  设P为? ToPropertyKey(V)。
  让O成为? ToObject(此值)。
  返回? HasOwnProperty(O,P)。
  


但是这些步骤在引擎中实际执行的方式只要发生就无关紧要。

08-07 09:05