CallExpression和MemberExpression之间的区别

Max*_*Pro 3 javascript ecmascript-6

有什么不同?我看了ECMAScript规范,但听不懂。真正的代码示例会很有帮助。

如果您可以在这里解释每一行,那就太好了

MemberExpression : 
 PrimaryExpression 
 FunctionExpression
 MemberExpression [ Expression ] 
 MemberExpression . IdentifierName 

CallExpression : 
 MemberExpression Arguments
 CallExpression Arguments 
 CallExpression [ Expression ] 
 CallExpression . IdentifierName
Run Code Online (Sandbox Code Playgroud)

例如

console.log - MemberExpression: MemberExpression . IdentifierName
console.log("hi") - CallExpression : MemberExpression Arguments
Run Code Online (Sandbox Code Playgroud)

什么是平等的

CallExpression : CallExpression . IdentifierName
CallExpression [ Expression ]
CallExpression : CallExpression Arguments 
Run Code Online (Sandbox Code Playgroud)

ES链接http://www.ecma-international.org/ecma-262/5.1/#sec-11.2

Pat*_*rts 8

  • func() 是一个 CallExpression
  • thing.func 是一个 MemberExpression
    • thingobjectMemberExpression
    • funcpropertyMemberExpression
  • thing.func()MemberExpressionCallExpression
    • thing.funccalleeCallExpression

资料来源:astexplorer.net


Ber*_*rgi 4

这里的相关部分是

NewExpression :
     MemberExpression 
    new NewExpression 
LeftHandSideExpression :
     NewExpression 
    CallExpression

它区分了三个主要的左侧表达式:

  • 构造函数调用
  • 函数/方法调用
  • 主要表达

所有这些都在正确的位置具有会员访问权限。因此,您列出的产生式之间的区别只是 aCallExpression始终包含调用 - 因此可能不是 new运算符后面的表达式的一部分。