Javascript 尽管文档禁止,但对象文字中具有相同名称的Getter和property成功运行
我从文件中了解到以下内容 使用get语法时请注意以下几点:Javascript 尽管文档禁止,但对象文字中具有相同名称的Getter和property成功运行,javascript,object,Javascript,Object,我从文件中了解到以下内容 使用get语法时请注意以下几点: 它可以有一个标识符,它可以是一个数字,也可以是一个字符串 它必须有零个参数(有关详细信息,请参阅不兼容的ES5更改:literal getter和setter函数现在必须有零个或一个参数) 它不能与另一个get或同一属性的数据项一起出现在对象文字中({get x(){},get x(){}}和{x:…,get x(){}被禁止) 我编写了以下代码来测试第三点 var foo = { bar: 10, get bar(
- 它可以有一个标识符,它可以是一个数字,也可以是一个字符串李>
- 它必须有零个参数(有关详细信息,请参阅不兼容的ES5更改:literal getter和setter函数现在必须有零个或一个参数)李>
- 它不能与另一个get或同一属性的数据项一起出现在对象文字中({get x(){},get x(){}}和{x:…,get x(){}被禁止)
var foo = {
bar: 10,
get bar() {
return 20
},
}
// The following call alerts 20.
alert(foo.bar)
这里我有一个对象literal
obj
,带有一个getterobj.bar
,属性名为bar
,与另一个属性bar
相同。根据我上面引用的文档的第三点,应该禁止使用此代码。然而,在Firefox 39.0中,我看到这段代码运行良好,并提醒2。为什么这段代码在Mozilla文档禁止的情况下能够成功运行?MDN对getter的限制
它不能与另一个get或同一属性的数据项一起出现在对象文本中({get x(){},get x(){}
和{x:…,get x(){}
被禁止)
未在实际报告中列出:
生产propertyaSignment:get PropertyName(){FunctionBody}
的计算如下:
propName
作为计算PropertyName
的结果李>
closure
作为创建中指定的新函数对象的结果,其中包含空参数列表和FunctionBody
指定的主体。将正在运行的执行上下文的。如果属性签名
包含在中,或者如果其函数体
为空,则将true
作为Strict
标志传入李>
desc
成为[Property Descriptor][5]{[[Get]]:closure,[[Enumerable]]:true,[[Configurable]]:true}
[属性标识符][5](propName,desc)
因此,似乎没有这样的限制,可能是MDN文章过时了。好问题。nodejs把它扔了出去:
C:\Dev\javascript\so-flow-32206528.js:6
get bar() {
^^^
SyntaxError: Object literal may not have data and accessor property
with the same name
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
MDN文档似乎与实现相矛盾