对象字面量的定义:
ObjectLiteral[Yield] :
{ }
{ PropertyDefinitionList[?Yield] }
{ PropertyDefinitionList[?Yield] , }
每行之间是“或”的关系,翻译过来就是:对象字面量(ObjectLiteral)由下面三种情况构成:
左大括 + 右大括号
左大括 + 属性定义列表 + 右大括号
左大括 + 属性定义列表 + 逗号 + 右大括号
我们继续看属性定义列表(PropertyDefinitionList):
PropertyDefinitionList[Yield] :
PropertyDefinition[?Yield]
PropertyDefinitionList[?Yield] , PropertyDefinition[?Yield]
属性定义列表(PropertyDefinitionList)由下面 2 种情况构成:
属性定义
属性定义列表 + 逗号 + 属性定义
这个是一个递归的定义。
我们继续看属性定义:
PropertyDefinition[Yield] :
IdentifierReference[?Yield]
CoverInitializedName[?Yield]
PropertyName[?Yield] : AssignmentExpression[In, ?Yield]
MethodDefinition[?Yield] //
MethodDefinition[Yield] :
PropertyName[?Yield] ( StrictFormalParameters ) { FunctionBody } //
GeneratorMethod[?Yield]
get PropertyName[?Yield] ( ) { FunctionBody }
set PropertyName[?Yield] ( PropertySetParameterList ) { FunctionBody }
PropertySetParameterList :
FormalParameter
属性名 + 左小括号 + 参数列表(可为空) + 右小括号 + 左大括号 + 函数体 + 右大括号。