2017-12-26 11 views
1

違いは何ですか?私はECMAScript仕様を見ていましたが、理解できませんでした。多くの助けになる実際のコード例。あなたがここにすべての行を説明することができた場合はCallExpressionとMemberExpressionの相違点

それは例えば

MemberExpression : 
PrimaryExpression 
FunctionExpression 
MemberExpression [ Expression ] 
MemberExpression . IdentifierName 

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

いいだろう

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

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

答えて

2
ため

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

リンク等しくなりますです

  • func()CallExpression
  • thing.funcあるMemberExpression
    • thingあるMemberExpression
  • thing.func()propertyが内MemberExpressionであるMemberExpression
  • funcobjectでありますastexplorer.net
    • thing.funcCallExpression

ソースのcalleeです。

+0

http://www.ecma-international.org/ecma-262/5.1/#sec-11.2(すべての行については、MemberExpressionとCallExpressionについて) 特に** MemberExpression [Expression] ** ** CallExpression [式] **または** MemberExpressionです。式**および** CallExpression。式** – MaximPro

+0

彼らは、他のどのような式が含まれているかを列挙して、さまざまな「式」の文法を定義しています。 _all_の意味を知りたい場合は、[babylon](https://github.com/babel/babylon/blob/master/ast/spec.md)などのJavaScriptパーサーのAST仕様を参照してください。 –

+0

私はそれを読んだが、私は違いを理解していない – MaximPro

0

ここに関連する部分は、三の大左側の表現を区別

NewExpression: 
    MemberExpression 
    new NewExpression 
LeftHandSideExpression: 
    NewExpression 
    CallExpression

です:

  • コンストラクタは
  • 関数/メソッドが
  • 主要表現
を呼び出し、呼び出し、

そしてそれらのすべてが適切な場所にメンバーアクセス権を持っています。したがって、リストされたプロダクションの違いは、CallExpressionには常にコールが含まれているため、new演算子の後に式の一部ではない可能性があります。

関連する問題