Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between CallExpression and MemberExpression

What is the difference? I looked at the ECMAScript specification, but did not understand. The real code examples that would help much.

If you can explain every line here it would be nice

MemberExpression : 
 PrimaryExpression 
 FunctionExpression
 MemberExpression [ Expression ] 
 MemberExpression . IdentifierName 

CallExpression : 
 MemberExpression Arguments
 CallExpression Arguments 
 CallExpression [ Expression ] 
 CallExpression . IdentifierName

For example

console.log - MemberExpression: MemberExpression . IdentifierName
console.log("hi") - CallExpression : MemberExpression Arguments

What is will be equal

CallExpression : CallExpression . IdentifierName
CallExpression [ Expression ]
CallExpression : CallExpression Arguments 

Link for ES http://www.ecma-international.org/ecma-262/5.1/#sec-11.2

like image 564
MaximPro Avatar asked Dec 26 '17 00:12

MaximPro


2 Answers

  • func() is a CallExpression
  • thing.func is a MemberExpression
    • thing is the object of the MemberExpression
    • func is the property of the MemberExpression
  • thing.func() is a MemberExpression within a CallExpression
    • thing.func is the callee of the CallExpression

Source: astexplorer.net.

like image 119
Patrick Roberts Avatar answered Oct 22 '22 20:10

Patrick Roberts


The relevant parts here are

NewExpression:
    MemberExpression
    new NewExpression
LeftHandSideExpression:
    NewExpression
    CallExpression

which distinguishes the three major left hand side expressions:

  • constructor calls
  • function/method calls
  • primary expressions

And all of them with member accesses in the right places. As such, the difference between the productions you listed is just that a CallExpression always contains a call - and may therefore not be part of the expression after a newoperator.

like image 33
Bergi Avatar answered Oct 22 '22 19:10

Bergi