แก้ไข 2016.03: Object.observe
เลิกใช้แล้วและถูกลบใน Chrome 50
แก้ไข 2014.05: Object.observe
ถูกเพิ่มใน Chrome 36
Chrome 36 มาพร้อมกับObject.observe
การติดตั้งในตัวซึ่งสามารถใช้งานได้ที่นี่
myObj = {a: 1, b: 2};
Object.observe(myObj, function (changes){
console.log("Changes:");
console.log(changes);
debugger;
})
myObj.a = 42;
หากคุณต้องการเพียงชั่วคราวคุณควรจัดเก็บการโทรกลับในตัวแปรและโทรObject.unobserve
เมื่อเสร็จแล้ว:
myObj = {a: 1, b: 2};
func = function() {debugger;}
Object.observe(myObj, func);
myObj.a = 42;
Object.unobserve(myObj, func);
myObj.a = 84;
หมายเหตุว่าเมื่อใช้คุณจะไม่ได้รับการแจ้งเตือนเมื่อได้รับมอบหมายไม่ได้เปลี่ยนแปลงอะไรเช่นถ้าคุณเขียนObject.observe
myObj.a = 1
หากต้องการดู call stack คุณต้องเปิดใช้งานตัวเลือก "async call stack" ในเครื่องมือ Dev:
คำตอบเดิม (2012.07):
console.watch
ร่างตามที่แนะนำโดย @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;
}
});
}
ภาวนา:
console.watch(obj, "someProp");
เข้ากันได้:
- ใน Chrome 20 คุณสามารถวางโดยตรงใน Dev Tools ตอนรันไทม์!
- เพื่อความสมบูรณ์: ใน Firebug 1.10 (Firefox 14) คุณต้องแทรกไว้ในเว็บไซต์ของคุณ (เช่นผ่าน Fiddler หากคุณไม่สามารถแก้ไขต้นฉบับด้วยตนเอง); น่าเศร้าที่ฟังก์ชั่นที่กำหนดจาก Firebug ดูเหมือนจะไม่แตกหัก
debugger
(หรือเป็นเรื่องของการกำหนดค่าหรือไม่โปรดแก้ไขให้ฉันด้วย) แต่ใช้console.log
งานได้
แก้ไข:
โปรดทราบว่าใน Firefox console.watch
อยู่แล้วเนื่องจากของ Firefox Object.watch
ที่ไม่ได้มาตรฐาน ดังนั้นใน Firefox คุณสามารถดูการเปลี่ยนแปลงได้ที่:
>>> var obj = { foo: 42 }
>>> obj.watch('foo', function() { console.log('changed') })
>>> obj.foo = 69
changed
69
แต่นี้จะเป็นเร็ว ๆ นี้ (ปลาย 2017) ลบออก