在JavaScript中,可以定義一個對象的屬性作爲一個getter/setter方法,而不僅僅是一個「普通」的價值:返回非值屬性
Object.defineProperty(obj, 'complex_property', {
get: function getter() { return this.protected; },
set: function setter(value) { this.protected = value; }
});
有什麼方法返回一個非沒有首先評估它的getter函數的對象的value屬性,以便這個(或類似的)是可能的?
obj.property = function(name) { return this.[ name ]; };
// Doesn't work:
// ReferenceError: invalid assignment left-hand side
obj.property('complex_property') = 5;
最後一行有效讀取6 = 5
- 很明顯的錯誤 - 因爲this.complex_property
首先計算,然後返回。將閉包與getter-setter屬性相結合是一種有效的方法來模擬「私有」屬性並驗證賦值而不必使用實際的get/set函數:現代javascript的一個更好的特性。如果有辦法返回一個未評估的getter/setter屬性,它會更好:有沒有我錯過的方法,或者它不可能?我們是否使用set(prop, value)
功能卡住?