题
我正在阅读ecmascript语言规范 功能调用部分
有人可以重塑或详细说明我的以下生态吗?
生产callexpression:memberexpression参数的评估如下:
- 评估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
部分很重要,因为稍后会进入。
这是最新规范中的完整报价(您的链接是与第三版的链接,该版本已由 第五版;但这并没有太大变化):
- 让参考作为评估Memberexpression的结果。
- 让func为getValue(参考)。
- 令arglist为评估参数的结果,产生内部参数值列表(请参见11.2.4)。
- 如果类型(func)不是对象,请扔一个typeError异常。
- 如果可容纳(func)是错误的,请抛出typeError异常。
- 如果类型(参考)是参考,则
一种。如果isPropertyReference(ref)是正确的,那么
一世。让这个价值为getBase(参考)。
b。否则,裁判的基础是环境记录
一世。让这个价值为调用getBase的隐式式混凝土方法(ref)的结果。- 否则,类型(参考)不是参考。
一种。让这个价值不确定。- 返回调用func上的[[call]]内部方法的结果,将此值作为此值,并将列表arglist作为参数值提供。
如你看到的, john
由于表达式是属性参考,因此再次进入6(a),因此 this
值是 john
(而不是像您这样称呼的那样,而不是全局对象 不是 通过属性参考)。
如果您正在阅读规格,我建议您阅读 最新的 而不是较旧的(尚无HTML版本)。恐怕散文同样不那么令人发指。 :-)
不隶属于 StackOverflow