2016-12-15 13 views
20

私は、FirefoxとChrome Devのコンソールにこの式を入力すると、それが有効なJavaScriptである理由私は疑問に思う:オブジェクト宣言のプロパティ名の後にコロンはありません、それは有効ですか?

var x = { a (b) {} }; 
console.log(x); 

xは、その後、「」と「A」と呼ばれる機能を含むプロパティを持つオブジェクトに設定されています引数識別子 "b"。 これはどのように有効なJavaScript構文ですか? "a"の後にコロンがないので、関数の定義を理解できません。

+5

ES6短いオブジェクト表記 – vlaz

+1

'x'は、' b'という名前の関数を持つ 'a'という名前の関数です。 –

答えて

30

これは、ES6/ES2015構文糖(Property shorthand)です。 ES6で :

const obj = { 
    a(b) { 
     // Shorthand method 
     // `this` context is `obj` 
    }, 
    c 
}; 

はあなたが書いたJavaScriptでは、

var obj = { 
    a: function a(b) { 

    }, 
    c: c 
}; 
+1

このプロパティを呼び出すと、そのプロパティは'このコンテキストを 'obj'として、まだ)。 – Hydro

+1

OPケースははいですが、通常はプロパティにセミコロンを使用できないため、名前を変更しないでください(コメントを追加します)。編集btwありがとう! – nicovank

+0

微妙な違いがあります。あなたの最初のスニペットでは、 'obj.a'はコンストラクタではありません。 2番目のスニペットでは、 'new obj.a'はいつものように動作します。 –

5

に等しい:

var x = { a (b) {} }; 

それはとさせて頂きます。たとえば

var x = { 
    a: function (b) { 

    } 
    } 

、これを確認することができます

var x = { a (b) { console.info('function called') } }; 
x.a(); 

これは、オブジェクトxのプロパティaに割り当てられている関数を呼び出します:それはあなたの疑問をクリアします。

関連する問題