Javascript 尽管文档禁止,但对象文字中具有相同名称的Getter和property成功运行

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(

我从文件中了解到以下内容

使用get语法时请注意以下几点:

  • 它可以有一个标识符,它可以是一个数字,也可以是一个字符串
  • 它必须有零个参数(有关详细信息,请参阅不兼容的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
,带有一个getter
obj.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文档似乎与实现相矛盾