残念ながら、JavaScript はプロパティがいつ変更されたかを通知しません。何度もそうしたいと思っていましたが、そうならないため、回避策を見つける必要がありました。プロパティを直接設定する代わりに、次のように、コールバック関数をトリガーするセッター メソッドを介して設定します (プロパティにアクセスするためにゲッター メソッドを使用することもできます)。
function callback(obj,key,val) {
console.log(key + " was set to " + val + " on ", obj);
}
var obj = {};
obj.setA=function(value){
obj.a=value;
callback(obj,'a',value);// triggers callback function
}
obj.getA=function(){
return obj.a;
}
obj.setA("something");
jsFiddle: http://jsfiddle.net/jdwire/v8sJt/
編集:コールバックなしでプロパティを完全に変更したくない場合の別のオプション:
function callback(obj,key,val) {
console.log(key + " was set to " + val + " on ", obj);
}
var obj={};
(function(){
var a=null;
obj.setA=function(value){
a=value;
callback(obj,'a',value);// triggers callback function
}
obj.getA=function(){
return a;
}
})()
console.log("a is "+obj.getA());// a is null
obj.setA("something"); // Set a to something
console.log("a is now "+obj.getA()); // a is now something
obj.a="something else"; // Set obj.a to something else to show how a is only accessible through setA
console.log("a is still "+obj.getA()); // a is still something
jsFiddle: http://jsfiddle.net/jdwire/wwaL2/