2016-12-15 82 views
20

我進入了Firefox和Chrome瀏覽器開發控制檯這個表達式,我不知道爲什麼它是有效的JavaScript:對象聲明中的屬性名稱後面沒有冒號,它有效嗎?

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

x然後設置爲與財產被稱爲「一」與「一」包含一個函數的對象參數標識符「b」。 這個有效的JavaScript語法如何? 「a」之後冒號缺少,我不理解函數定義。

+5

ES6簡短對象符號 – vlaz

+1

'x'是一個名爲'a'的函數,它的參數名爲'b' –

回答

30

這是ES6/ES2015語法糖(Property shorthand)。 隨着ES6:

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

等於

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

    }, 
    c: c 
}; 
+1

我將其命名爲一個簡寫方法(因爲當你調用這個屬性時,它的函數會得到'這個上下文作爲'obj',但)。 – Hydro

+1

是否是OP案例,但通常情況下,您不能使用分號作爲任何屬性,所以我寧願不重命名它(儘管我會添加註釋)。感謝您編輯順便說一句! – nicovank

+0

請注意有一個微妙的區別。在你的第一個片段中,'obj.a'不是一個構造函數。在第二個片段中,'new obj.a'像往常一樣工作。 –

5

在JavaScript中,當你寫:

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

它會認爲它是:

var x = { 
    a: function (b) { 

    } 
    } 

例如,你可以檢查這個它會清除您的疑問:

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

這將調用分配給對象x財產a功能。

相關問題