aps*_*nce 4 javascript ecmascript-6
使用ES6,我可以使用以下函数创建一个新对象:
var obj = {
something() {}
};
Run Code Online (Sandbox Code Playgroud)
那讲得通.但我也可以这样做:
var obj = {
'something'() {}
};
Run Code Online (Sandbox Code Playgroud)
或者我可以这样做:
var obj = {
['something']() {}
};
Run Code Online (Sandbox Code Playgroud)
这三种语法之间有区别吗?为什么所有这些语法都有效?
这三种语法之间有区别吗?
不是你的例子中的结果.
但是,不同的语法确实具有不同的特征.定义属性名称的方式不是特定于方法定义btw,规则适用于所有属性名称:
无需引用有效标识符名称或数字文字的属性名称:
{
foo: ...,
10e4: ...,
if: ...,
}
Run Code Online (Sandbox Code Playgroud)还需要引用其他任何内容:
{
'foo+bar': ...,
'abc def': ...,
'123,45': ...,
}
Run Code Online (Sandbox Code Playgroud)方括号语法是ES6中的新增功能,允许您动态计算属性名称:
{
[getPropertyName()]: ...,
['item' + (i * 3)]: ...,
}
Run Code Online (Sandbox Code Playgroud)为什么所有这些语法都有效?
因为语法允许它:
MethodDefinition :
PropertyName ( StrictFormalParameters ) { FunctionBody }
GeneratorMethod
get PropertyName ( ) { FunctionBody }
set PropertyName( PropertySetParameterList ) { FunctionBody }
PropertyName :
LiteralPropertyName
ComputedPropertyName
LiteralPropertyName :
IdentifierName
StringLiteral
NumericLiteral
ComputedPropertyName :
[ AssignmentExpression ]
Run Code Online (Sandbox Code Playgroud)
(不知道你在这里期待什么样的答案)
如果您认为方法等同于为属性分配函数,那么将属性名称的相同规则应用于函数/方法名称似乎是有意义的.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |