2016.03 Düzenleme: Object.observe
kullanımdan kaldırıldı ve Chrome 50'de kaldırıldı
2014.05 Düzenleme: Object.observe
Chrome 36'ya eklendi
Chrome 36 Object.observe
, buradan yararlanılabilecek yerel uygulamayla birlikte gelir:
myObj = {a: 1, b: 2};
Object.observe(myObj, function (changes){
console.log("Changes:");
console.log(changes);
debugger;
})
myObj.a = 42;
Yalnızca geçici olarak istiyorsanız, geri aramayı bir değişkene kaydetmeli ve Object.unobserve
işiniz bittiğinde çağırmalısınız :
myObj = {a: 1, b: 2};
func = function() {debugger;}
Object.observe(myObj, func);
myObj.a = 42;
Object.unobserve(myObj, func);
myObj.a = 84;
Kullanırken Object.observe
, ödev hiçbir şeyi değiştirmediğinde, örneğin yazdıysanız, bilgilendirilmeyeceğinizi unutmayın myObj.a = 1
.
Çağrı yığınını görmek için Geliştirme Araçlarında "eşzamansız çağrı yığını" seçeneğini etkinleştirmeniz gerekir:
Orijinal cevap (2012.07):
console.watch
@Katspaugh'un önerdiği bir taslak:
var console = console || {};
console.watch = function(oObj, sProp) {
var sPrivateProp = "$_"+sProp+"_$";
oObj[sPrivateProp] = oObj[sProp];
Object.defineProperty(oObj, sProp, {
get: function () {
return oObj[sPrivateProp];
},
set: function (value) {
debugger;
oObj[sPrivateProp] = value;
}
});
}
Çağrı:
console.watch(obj, "someProp");
Uyumluluk:
- Chrome 20'de, bunu çalışma zamanında doğrudan Geliştirme Araçlarına yapıştırabilirsiniz!
- Tamlık için: Firebug 1.10'da (Firefox 14), web sitenize enjekte etmeniz gerekir (örneğin, kaynağı manuel olarak düzenleyemiyorsanız Fiddler aracılığıyla); ne yazık ki, Firebug'dan tanımlanan işlevler çalışmıyor gibi görünüyor
debugger
(yoksa bir yapılandırma sorunu mu? Lütfen o zaman beni düzeltin), ama console.log
çalışıyor.
Düzenle:
Firefox'un console.watch
standart olmaması nedeniyle Firefox'ta zaten mevcut olduğunu unutmayın Object.watch
. Dolayısıyla, Firefox'ta değişiklikleri yerel olarak izleyebilirsiniz:
>>> var obj = { foo: 42 }
>>> obj.watch('foo', function() { console.log('changed') })
>>> obj.foo = 69
changed
69
Ancak, bu yakında (2017'nin sonunda) kaldırılacaktır .