Si può sempre avvolgere o
con il proprio setter getter se il defineProperty
non fa il lavoro per voi.
var myO = {
o: o, // original o
changed: false,
set: function (prop, val) {
this.o[prop] = val;
this[prop + "IsChanged"] = true;
},
get: function (prop) {
return this.o[prop];
}
};
myO.set("a", 2);
console.log(myO.aIsChanged); // true
Una soluzione migliore sarebbe quella di eseguire un evento con qualcosa di simile a Backbone.Events
exeute someting myO.on("change", function() { ... })
var myO = {
o: o, // original o
changed: false,
set: function (prop, val) {
this.o[prop] = val;
this.trigger("change", prop, val);
},
get: function (prop) {
return this.o[prop];
}
};
_.extend(myO, Backbone.events);
myO.on("change", function (prop, val) {
// Do stuff with the change
});
myO.set("a", 1);
sto usando il metodo della biblioteca Underscore
extend
qui, FYI.
Vuoi ricevere una notifica per ogni cambiamento o semplicemente avere un modo per controllarlo? Se si desidera verificare, direi generare un codice hash dell'oggetto e confrontarlo quando necessario. – Nic
Basta avere un modo per controllarlo, ma come posso generare questo hash? –