Edit 2016.03: Object.observe
sudah usang dan dihapus di Chrome 50
Edit 2014.05: Object.observe
telah ditambahkan di Chrome 36
Chrome 36 dikirimkan dengan Object.observe
implementasi asli yang dapat dimanfaatkan di sini:
myObj = {a: 1, b: 2};
Object.observe(myObj, function (changes){
console.log("Changes:");
console.log(changes);
debugger;
})
myObj.a = 42;
Jika Anda menginginkannya hanya sementara, Anda harus menyimpan panggilan balik dalam suatu variabel dan menelepon Object.unobserve
ketika selesai:
myObj = {a: 1, b: 2};
func = function() {debugger;}
Object.observe(myObj, func);
myObj.a = 42;
Object.unobserve(myObj, func);
myObj.a = 84;
Perhatikan bahwa saat menggunakan Object.observe
, Anda tidak akan diberitahu ketika tugas tidak mengubah apa pun, misalnya jika Anda telah menulis myObj.a = 1
.
Untuk melihat tumpukan panggilan, Anda harus mengaktifkan opsi "tumpukan panggilan async" di Dev Tools:
Jawaban asli (2012.07):
Sebuah console.watch
sketsa seperti yang disarankan oleh @katspaugh:
var console = console || {}; // just in case
console.watch = function(oObj, sProp) {
var sPrivateProp = "$_"+sProp+"_$"; // to minimize the name clash risk
oObj[sPrivateProp] = oObj[sProp];
// overwrite with accessor
Object.defineProperty(oObj, sProp, {
get: function () {
return oObj[sPrivateProp];
},
set: function (value) {
//console.log("setting " + sProp + " to " + value);
debugger; // sets breakpoint
oObj[sPrivateProp] = value;
}
});
}
Doa:
console.watch(obj, "someProp");
Kesesuaian:
- Di Chrome 20, Anda dapat menempelkannya langsung di Dev Tools saat runtime!
- Untuk kelengkapan: di Firebug 1.10 (Firefox 14), Anda harus menyuntikkannya di situs web Anda (misalnya melalui Fiddler jika Anda tidak dapat mengedit sumber secara manual); sayangnya, fungsi yang didefinisikan dari Firebug tampaknya tidak rusak
debugger
(atau apakah ini masalah konfigurasi? tolong perbaiki saya), tetapi console.log
berfungsi.
Edit:
Perhatikan bahwa di Firefox, console.watch
sudah ada, karena Firefox tidak standar Object.watch
. Karenanya di Firefox, Anda dapat melihat perubahan secara asli:
>>> var obj = { foo: 42 }
>>> obj.watch('foo', function() { console.log('changed') })
>>> obj.foo = 69
changed
69
Namun, ini akan segera (akhir 2017) dihapus .