每次更改對象屬性時是否可以使用setter/getter來分派事件?通過改變,我的意思是成員添加,刪除或更新。使用setter在對象屬性更改時調度事件
下面是我嘗試實現的一個非工作示例。每次將成員添加到instance._dataStore
時,instance
都應觸發事件。
var EventDispatcherObject = require("EventDispatcherObject");
var instance = new EventDispatcherObject();
//This is a non-working attempt to use setter to dispatch event
Object.defineProperty(instance, "_dataStore", {
get : function() {
return this_dataStore;
},
set : function(data) {
this._dataStore[data] = data;
this.dispatchEvent("_dataStoreChanged");
}
});
var data = [{id: "A", data: "abc"}, {id: "B", data: "def"}, {id: "C", data: "ghi"}];
for (var i=0; i < data.length; i++) {
instance._dataStore[data[i].id] = data[i];
}
//should return:
console.log(instance._dataStore);
>>> {
A : {id: "A", data: "abc"},
B : {id: "B", data: "def"},
C : {id: "C", data: "ghi"}
}
console.log(instance._dataStore[A]);
>>> {id: "A", data "abc"}
其實這非工作示例返回錯誤:
InternalError: too much recursion: return this._dataStore;
是的,這是可能的。你的例子怎麼樣都不起作用(除了無效語法,因爲getter的尾括號缺失,並且沒有名爲'EventDispatcherObject'的類(內置))? –
好的...看到編輯... –