【发布时间】:2016-07-29 14:36:19
【问题描述】:
自 ECMAScript 6 以来,大多数函数对象都定义了 name 属性。
现在,如果将匿名函数表达式分配给变量或者是对象初始化器中属性定义的一部分,则变量的标识符或属性的名称将是 name 的值em> 函数对象的属性。
const a = function () {};
console.log(a.name); // a
const object = {
b : function () {}
};
console.log(object.b.name); // b
我在理解有关此行为的文档语义的规范方面没有问题,但我真的不明白,为什么像以下示例中对左侧成员表达式的赋值不会影响 name函数的属性,好像是这样的。
const object = {};
object.c = function () {};
console.log(object.c.name); //
作为成员表达式的一部分,显然有一个标识符可以(并且应该?)用作name属性的值。即使属性名称是括号内的表达式,这也应该没有问题,因为在对象初始化器中使用计算属性名称也不会阻止定义匿名函数的 name 属性。
如果有人能确认观察到的行为符合规范,那就太好了,无论如何,请简要解释适用于该语法的特定语义。
【问题讨论】:
-
是的,这是规范中奇怪的部分,您已正确阅读。 esdiscuss.org/topic/…
-
你好,Bergi。感谢您的链接(和链接中的链接)。现在我发现我没有误解
IsIdentifierRef。我只是不确定这一点,并寻求一些确认,因为由此产生的行为对我来说似乎完全不一致,正如您在本次讨论中提到的那样。遗憾的是,ES 2017 似乎也没有改变 this 的任何内容。 :-(
标签: javascript