左值表达式
语法:
MemberExpression : PrimaryExpression FunctionExpression MemberExpression [ Expression ] MemberExpression . IdentifierName new MemberExpression Arguments
NewExpression : MemberExpression new NewExpression
CallExpression : MemberExpression Arguments CallExpression Arguments CallExpression [ Expression ] CallExpression . IdentifierName
Arguments : ( ) ( ArgumentList )
ArgumentList : AssignmentExpression ArgumentList , AssignmentExpression
LeftHandSideExpression : NewExpression CallExpression
属性访问
属性是通过 name 来访问的,可以使用点表示法访问
MemberExpression . IdentifierName CallExpression . IdentifierName
或者括号表示法访问
MemberExpression [ Expression ] CallExpression [ Expression ]
点表示法是根据以下的语法转换解释
MemberExpression . IdentifierName
这会等同于下面这个行为
MemberExpression [ <identifier-name-string> ]
类似地,
CallExpression . IdentifierName
是等同于下面的行为
CallExpression [ <identifier-name-string> ]
是一个字符串字面量,它与 Unicode 编码后的 IdentifierName 包含相同的字符序列。
产生式 MemberExpression : MemberExpression [ Expression ] is evaluated as follows:
- 令 baseReference 为解释执行 MemberExpression 的结果 .
- 令 baseValue 为 GetValue(baseReference).
- 令 propertyNameReference 为解释执行 Expression 的结果 .
- 令 propertyNameValue 为 GetValue(propertyNameReference).
- 调用 CheckObjectCoercible(baseValue).
- 令 propertyNameString 为 ToString(propertyNameValue).
- 如果正在执行中的语法产生式包含在严格模式代码当中,令 strict 为 true, 否则令 strict 为 false.
- 返回一个值类型的引用,其基值为 baseValue 且其引用名为 propertyNameString, 严格模式标记为 strict.
产生式CallExpression : CallExpression [ Expression ] 以完全相同的方式执行,除了第1步执行的是其中的CallExpression。
new 运算符
产生式 NewExpression : new NewExpression 按照下面的过程执行 :
- 令 ref 为解释执行 NewExpression 的结果 .
- 令 constructor 为 GetValue(ref).
- 如果 Type(constructor) is not Object ,抛出一个 TypeError 异常 .
- 如果 constructor 没有实现 [[Construct]] 内置方法 ,抛出一个 TypeError 异常 .
- 返回调用 constructor 的 [[Construct]] 内置方法的结果 , 传入按无参数传入参数列表 ( 就是一个空的参数列表 ).
产生式 MemberExpression : new MemberExpression Arguments 按照下面的过程执行 :
- 令 ref 为解释执行 MemberExpression 的结果 .
- 令 constructor 为 GetValue(ref).
- 令 argList 为解释执行 Arguments 的结果 , 产生一个由参数值构成的内部列表类型 (11.2.4).
- 如果 Type(constructor) is not Object ,抛出一个 TypeError 异常 .
- 如果 constructor 没有实现 [[Construct]] 内置方法,抛出一个 TypeError 异常 .
- 返回以 argList 为参数调用 constructor 的 [[Construct]] 内置方法的结果。
函数调用
产生式 CallExpression : MemberExpression Arguments 按照下面的过程执行 :
- 令 ref 为解释执行 MemberExpression 的结果 .
- 令 func 为 GetValue(ref).
- 令 argList 为解释执行 Arguments 的结果 , 产生参数值们的内部列表 (see 11.2.4).
- 如果 Type(func) is not Object ,抛出一个 TypeError 异常 .
- 如果 IsCallable(func) is false ,抛出一个 TypeError 异常 .
- 如果 Type(ref) 为 Reference,那么 如果 IsPropertyReference(ref) 为 true,那么 令 thisValue 为 GetBase(ref). 否则 , ref 的基值是一个环境记录项 令 thisValue 为调用 GetBase(ref) 的 ImplicitThisValue 具体方法的结果
- 否则 , 假如 Type(ref) 不是 Reference. 令 thisValue 为 undefined.
- 返回调用 func 的 [[Call]] 内置方法的结果 , 传入 thisValue 作为 this 值和列表 argList 作为参数列表
产生式 CallExpression : CallExpression Arguments以完全相同的方式执行,除了第1步执行的是其中的CallExpression。
假如func是一个原生的ECMAScript对象,返回的结果永远不会是Reference类型,调用一个宿主对象是否返回一个Reference类型的值由实现决定。 若一Reference值返回,则它必须是一个非严格的属性引用。
参数列表
The evaluation of an argument list produces a List of values (see 8.8).
产生式 Arguments : ( ) 按照下面的过程执行 :
- 返回一个空列表 .
产生式 Arguments : ( ArgumentList ) 按照下面的过程执行 :
- 返回解释执行 ArgumentList 的结果 .
产生式 ArgumentList ':' AssignmentExpression 按照下面的过程执行 :
- 令 ref 为解释执行 AssignmentExpression 的结果 .
- 令 arg 为 GetValue(ref).
- 返回 a List whose sole item is arg.
产生式 ArgumentList :'''' ArgumentList , AssignmentExpression 按照下面的过程执行 :
- 令 precedingArgs 为解释执行 ArgumentList 的结果 .
- 令 ref 为解释执行 AssignmentExpression 的结果 .
- 令 arg 为 GetValue(ref).
- 返回一个列表,长度比 precedingArgs 大 1 且 它的 items 为 precedingArgs 的 items, 按顺序在后面跟 arg,arg 是这个新的列表的最后一个 item.
函数表达式
产生式 MemberExpression : FunctionExpression 按照下面的过程执行 :
- 返回解释执行 FunctionExpression 的结果 .
更多建议: