我想創建一個對象。但我不明白爲什麼我的財產獲得者定居者不能簡單地致電this.bar
。因爲這樣我的foo對象似乎最終有兩個屬性。使用Object.defineProperties給出兩個屬性
這是正確的還是我:使用錯誤的DefineProperties
- 缺少點
與bar
屬性創建foo
var foo = function()
{
Object.defineProperties(this, {
bar : {
get : function() {return this.barVal},
set : function(value) { this.barVal = value},
enumerable: true,
configurable: true
}
})
};
var o = new foo();
o.bar = "Hello";
console.log(JSON.stringify(o));
//output {"bar":"Hello","barVal":"Hello"}
真有趣。所以defineProperties實際上只適用於非常複雜的對象?否則它會讓我感到過度殺傷。我只是想預先定義屬性(我習慣於C#,所以這是一個學習曲線) – JonWells
如果你只是想設置一個值,那麼你可以簡單地執行'this.bar = value'。當您希望enumerable/configurable/writable爲false時,Object.defineProperty用於訪問器(set/get)或數據(value)。 – 2012-05-22 10:18:12
也可以使用Object.defineProperty來更新現有的屬性。就像你想讓一個屬性不可枚舉一樣:'this.bar ='Hello'; Object.defineProperty(this,'bar',{enumerable:false});'會根據需要工作,保持現有值但修改可枚舉性。 – 2012-05-22 10:21:41