bearbeiten 2016,03: Object.observe
ist veraltet und entfernt in Chrome 50
bearbeiten 2014,05: Object.observe
in Chrome 36
Chrome 36 Schiffe mit nativer Object.observe
Umsetzung hinzugefügt wurde das kann hier eingesetzt werden:
myObj = {a: 1, b: 2};
Object.observe(myObj, function (changes){
console.log("Changes:");
console.log(changes);
debugger;
})
myObj.a = 42;
Wenn Sie es nur vorübergehend wollen, sollten Sie Rückruf in einer Variablen speichern und Object.unobserve
rufen, wenn Sie fertig:
myObj = {a: 1, b: 2};
func = function() {debugger;}
Object.observe(myObj, func);
myObj.a = 42;
Object.unobserve(myObj, func);
myObj.a = 84;
Beachten Sie, dass, wenn Object.observe
verwenden, werden Sie nicht benachrichtigt, wenn die Zuordnung nicht irgendetwas geändert hat , z.B wenn Sie myObj.a = 1
geschrieben haben.
den Call-Stack, um zu sehen, müssen Sie "Asynchron-Call-Stack" -Option in Dev-Tools aktivieren:
Original-Antwort (2012.07):
A console.watch
Skizze wie von @ Katspaugh vorgeschlagen:
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;
}
});
}
Invocation:
console.watch(obj, "someProp");
Kompatibilität:
- In Chrome 20, können Sie es direkt in Dev-Tools zur Laufzeit einfügen!
- Der Vollständigkeit halber: in Firebug 1.10 (Firefox 14) müssen Sie es in Ihre Website injizieren (z. B. via Fiddler, wenn Sie die Quelle nicht manuell bearbeiten können); Leider scheinen die von Firebug definierten Funktionen nicht auf
debugger
zu brechen (oder ist es eine Frage der Konfiguration? Bitte korrigieren Sie mich dann), aber console.log
funktioniert.
Edit:
Beachten Sie, dass in Firefox, console.watch
bereits vorhanden ist, aufgrund von Firefox Nicht-Standard-Object.watch
.Daher in Firefox können Sie für Änderungen sehen nativ:
>>> var obj = { foo: 42 }
>>> obj.watch('foo', function() { console.log('changed') })
>>> obj.foo = 69
changed
69
jedoch this will be soon (late 2017) removed.
Wenn Sie diese Elemente mit HTML zu tun, sehen http://stackoverflow.com/a/32686203/308851 – chx