संपादित 2016.03: Object.observe
पदावनत और क्रोम 50
संपादित 2014.05 में निकाल दिया जाता है: देशी Object.observe
कार्यान्वयन के साथ 36
क्रोम 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
लिखा है।
कॉल स्टैक देखने के लिए, आप देव उपकरण में "async कॉल स्टैक" विकल्प को सक्षम करने की आवश्यकता है:
मूल जवाब (2012.07):
@स्केच जैसा कि @ katspaugh द्वारा सुझाया गया है:
console = console || {}; // just in case
console.watch = function(oObj, sProp) {
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");
संगतता:
- क्रोम 20 में, आप इसे सीधे देव उपकरण में कार्यावधि में पेस्ट कर सकते हैं!
- पूर्णता के लिए: फ़ायरबग 1.10 (फ़ायरफ़ॉक्स 14) में, आपको इसे अपनी वेबसाइट में इंजेक्ट करना होगा (उदाहरण के लिए फिडलर के माध्यम से यदि आप मैन्युअल रूप से स्रोत संपादित नहीं कर सकते हैं); अफसोस की बात है, फायरबग से परिभाषित कार्य
debugger
पर टूटने लगते हैं (या यह कॉन्फ़िगरेशन का मामला है? कृपया मुझे सही करें), लेकिन console.log
काम करता है।
संपादित करें:
ध्यान दें कि फ़ायरफ़ॉक्स में, console.watch
पहले से मौजूद है, Firefox के अमानक Object.watch
की वजह से।फ़ायरफ़ॉक्स में इसलिए, आप मूल रूप से परिवर्तन के लिए देख सकते हैं:
>>> var obj = { foo: 42 }
>>> obj.watch('foo', function() { console.log('changed') })
>>> obj.foo = 69
changed
69
हालांकि, this will be soon (late 2017) removed।
आप HTML तत्वों के साथ ऐसा करना चाहते हैं http://stackoverflow.com/a/32686203/308851 देख – chx