संपादित करें 2016.03: Object.observe
क्रोम 50 में पदावनत और हटा दिया गया है
2014.05 संपादित करें: Object.observe
Chrome 36 में जोड़ा गया था
मूल Object.observe
कार्यान्वयन वाले क्रोम 36 जहाज जिनका लाभ यहां लिया जा सकता है:
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):
एक 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 में पेस्ट कर सकते हैं!
- पूर्णता के लिए: फायरबग 1.10 (फ़ायरफ़ॉक्स 14) में, आपको इसे अपनी वेबसाइट में इंजेक्ट करना होगा (जैसे कि फ़िडलर के माध्यम से यदि आप स्रोत को मैन्युअल रूप से संपादित नहीं कर सकते हैं); दुख की बात है कि फायरबग से परिभाषित कार्य टूटने नहीं लगते हैं
debugger
(या यह विन्यास की बात है? कृपया मुझे ठीक करें), लेकिन console.log
काम करता है।
संपादित करें:
ध्यान दें कि console.watch
फ़ायरफ़ॉक्स के गैर-मानक के कारण फ़ायरफ़ॉक्स में पहले से मौजूद है Object.watch
। इसलिए फ़ायरफ़ॉक्स में, आप मूल रूप से परिवर्तनों के लिए देख सकते हैं:
>>> var obj = { foo: 42 }
>>> obj.watch('foo', function() { console.log('changed') })
>>> obj.foo = 69
changed
69
हालांकि, इसे जल्द (2017 के अंत में) हटा दिया जाएगा ।