我正在阅读ecmascript语言规范 功能调用部分

有人可以重塑或详细说明我的以下生态吗?

生产callexpression:memberexpression参数的评估如下:

  1. 评估memberexpression。

让我们以此代码为例。

var john = { 
  name: 'John', 
  greet: function(person) { 
    alert("Hi " + person + ", my name is " + this.name); 
  } 
}; 

john.greet("Mark");

以上代码为例,生产量压缩意味着什么?在这种情况下,memberexpress是什么,约翰。格雷特?

谢谢!

有帮助吗?

解决方案

memberexpression是 john.greet. 。基本上说的是:步骤1:弄清楚呼叫什么函数。 :-) 这 john 部分很重要,因为稍后会进入。

这是最新规范中的完整报价(您的链接是与第三版的链接,该版本已由 第五版;但这并没有太大变化):

  1. 让参考作为评估Memberexpression的结果。
  2. 让func为getValue(参考)。
  3. 令arglist为评估参数的结果,产生内部参数值列表(请参见11.2.4)。
  4. 如果类型(func)不是对象,请扔一个typeError异常。
  5. 如果可容纳(func)是错误的,请抛出typeError异常。
  6. 如果类型(参考)是参考,则
    一种。如果isPropertyReference(ref)是正确的,那么
    一世。让这个价值为getBase(参考)。
    b。否则,裁判的基础是环境记录
    一世。让这个价值为调用getBase的隐式式混凝土方法(ref)的结果。
  7. 否则,类型(参考)不是参考。
    一种。让这个价值不确定。
  8. 返回调用func上的[[call]]内部方法的结果,将此值作为此值,并将列表arglist作为参数值提供。

如你看到的, john 由于表达式是属性参考,因此再次进入6(a),因此 this 值是 john (而不是像您这样称呼的那样,而不是全局对象 不是 通过属性参考)。

如果您正在阅读规格,我建议您阅读 最新的 而不是较旧的(尚无HTML版本)。恐怕散文同样不那么令人发指。 :-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top