2014-07-17 28 views
5

爲什麼JavaScript有兩種不同的方式來獲取/設置對象屬性?JavaScript獲取/設置方法與標準方法

例子:

//implementation 1 
var obj1 = { 
    "x":1, 
    get number() {return this.x}, 
    set number(n) {this.x = n} 
} 

//implementation 2 
var obj2 = { 
    "x":1, 
    getX: function(){return this.x}, 
    setX: function(n){this.x = n} 
} 

難道一個實現風格,具有比其他優勢?

回答

2

第二個主要優點是簡單的ol'javascript對象,然後被廣泛支持!

,你可以在MDN(getset)看到的第一個是最近(ECMAScript的5.1),然後只能通過IE9 +特別支持...

我再推薦第二個實現(這一時刻吧! )...

+1

這不是一個好的答案,因爲兩種方法都有完全不同的意圖。 「新」獲取/設置方式確保每當以讀/寫方式訪問屬性時不調用任何方法***就調用getter/setter。實現2要求你明確**調用這些方法,否則在讀取/寫入對象屬性時不會執行它們。 – connexo

4

與常規方法不同,使用getset可讓您直接操作對象的屬性(===更清晰/更小的代碼) - 實際上在幕後調用getter和setter方法。

var obj1 = { 
    "x":1, 
    get number() {console.log('get was called'); return this.x}, 
    set number(n) {console.log('set was called'); this.x = n} 
}; 

alert(obj1.number); // calls the getter (and prints to console) 

obj1.number = 10; // calls the setter (and prints to console) 

作爲提及的其他答案,根據您的目標瀏覽器設置決定/反對使用此。