当使用纯javascript时,我注意到有些人会将他们的对象编码为这样定义:
var oddObject = {
someProperty: 'random1',
// NOTE: No function keyword. Why does this work and are there
// other places this is also not required?
someFunction() { return "boring value"; },
someOtherProperty: 'random2'
}
var el = document.getElementById("result");
el.innerHTML = oddObject.someFunction();
如果你真的想看到它does work(至少从Chrome 47开始),我做了一个小提琴。那么为什么这是允许的,还有其他地方我可以利用缩写吗?
答案 0 :(得分:2)
这是在ES2015中添加的。在ES2015 Object Initializer syntax中,我们看到对象文字中的 PropertyDefinition 可以是以下之一:
PropertyDefinition :
- IdentifierReference
- CoverInitializedName
- PropertyName : AssignmentExpression
- 的 MethodDefinition 强>
MethodDefinition是以下之一:
MethodDefinition :
- PropertyName ( StrictFormalParameters ){ FunctionBody }
- GeneratorMethod
- 获取 PropertyName (){ FunctionBody }
- 设置 PropertyName ( PropertySetParameterList ){ FunctionBody }
相比之下,previous ES5 spec's Object Intializer仅允许普通的名称/值对和set
/ get
函数:
PropertyAssignment :
- PropertyName : AssignmentExpression
- 获取 PropertyName (){ FunctionBody }
- 设置 PropertyName ( PropertySetParameterList ){ FunctionBody }
由于ES2015最近才最终确定,因此可能尚未广泛实施。 (kangax.github.io上有一个兼容性表格。)
请注意,ES2015语法还将 IdentifierReference 添加为有效属性,允许您通过在对象文字中包含其名称来在对象中包含变量值:
var foo = "bar";
var obj = {
baz: 3,
foo
};
此独立foo
属性与属性定义foo: "bar"
的作用相同。