Bitte beachten Sie, dass Object.Watch
und Object.Observe
sind jetzt beide veraltet (Stand Juni 2018).
Ich suchte nach einer einfachen Möglichkeit, ein Objekt oder eine Variable auf Änderungen zu überwachen, und fand heraus Object.watch()
, dass dies in Mozilla-Browsern unterstützt wird, nicht jedoch im IE. Also fing ich an, mich umzusehen, ob jemand eine Entsprechung geschrieben hatte.
Das einzige, was ich gefunden habe, war ein jQuery-Plugin , aber ich bin mir nicht sicher, ob dies der beste Weg ist. Ich verwende jQuery auf jeden Fall in den meisten meiner Projekte, daher mache ich mir keine Sorgen um den jQuery-Aspekt ...
Wie auch immer, die Frage: Kann mir jemand ein funktionierendes Beispiel für dieses jQuery-Plugin zeigen? Ich habe Probleme damit es funktioniert ...
Oder kennt jemand bessere Alternativen, die browserübergreifend funktionieren würden?
Update nach Antworten :
Vielen Dank an alle für die Antworten! Ich habe den hier veröffentlichten Code ausprobiert: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html
Aber ich konnte es scheinbar nicht mit IE zum Laufen bringen. Der folgende Code funktioniert in Firefox einwandfrei, im IE jedoch nicht. In Firefox wird bei jeder watcher.status
Änderung das document.write()
In watcher.watch()
aufgerufen und Sie können die Ausgabe auf der Seite sehen. Im IE passiert das nicht, aber ich kann sehen, dass watcher.status
der Wert aktualisiert wird, da der letzte document.write()
Aufruf den richtigen Wert anzeigt (sowohl im IE als auch im FF). Aber wenn die Rückruffunktion nicht aufgerufen wird, ist das irgendwie sinnlos ... :)
Vermisse ich etwas
var options = {'status': 'no status'},
watcher = createWatcher(options);
watcher.watch("status", function(prop, oldValue, newValue) {
document.write("old: " + oldValue + ", new: " + newValue + "<br>");
return newValue;
});
watcher.status = 'asdf';
watcher.status = '1234';
document.write(watcher.status + "<br>");
quelle
Antworten:
(Entschuldigung für das Cross-Posting, aber diese Antwort, die ich auf eine ähnliche Frage gegeben habe, funktioniert hier einwandfrei.)
Ich habe vor einiger Zeit ein kleines Objekt erstellt. Es funktioniert in IE8, Safari, Chrome, Firefox, Opera usw.
quelle
Object.defineProperty()
. Am Ende habe ich mir die MDN- Referenz angesehen, um zu sehen, wie es funktioniert.Dieses Plugin verwendet einfach einen Timer / ein Intervall, um wiederholt nach Änderungen an einem Objekt zu suchen. Vielleicht gut genug, aber ich persönlich hätte gerne mehr Unmittelbarkeit als Beobachter.
Hier ist ein Versuch,
watch
/unwatch
zum IE zu bringen: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html .Es ändert die Syntax gegenüber der Firefox-Methode zum Hinzufügen von Beobachtern. Anstatt :
Sie machen:
Nicht so süß, aber als Beobachter werden Sie sofort benachrichtigt.
quelle
Die Antworten auf diese Frage sind etwas veraltet. Object.watch und Object.observe sind beide veraltet und sollten nicht verwendet werden.
Heute können Sie das Proxy- Objekt verwenden, um an einem Objekt vorgenommene Änderungen zu überwachen (und abzufangen). Hier ist ein einfaches Beispiel:
Wenn Sie Änderungen an einem verschachtelten Objekt beobachten müssen, müssen Sie eine spezielle Bibliothek verwenden. Ich habe Observable Slim veröffentlicht und es funktioniert so:
quelle
Aktuelle Antwort
Verwenden Sie das neue Proxy- Objekt, mit dem Änderungen am Ziel überwacht werden können.
Alte Antwort von 2015
Sie hätten Object.observe () von ES7 verwenden können . Hier ist eine Polyfüllung. Aber Object.observe () wird nun abgebrochen . Sorry Leute!
quelle
Beachten Sie, dass Sie in Chrome 36 und höher auch verwenden können
Object.observe
. Dies ist tatsächlich Teil eines zukünftigen ECMAScript-Standards und keine browserspezifische Funktion wie die von MozillaObject.watch
.Object.observe
funktioniert nur mit Objekteigenschaften, ist aber viel leistungsfähiger alsObject.watch
(was für Debugging-Zwecke gedacht ist, nicht für Produktionszwecke).quelle
Sie können Object.defineProperty verwenden .
Beobachten Sie die Unterkunft
bar
infoo
quelle
Ich habe Watch.js in einem meiner Projekte verwendet. Und es funktioniert gut. Einer der Hauptvorteile der Verwendung dieser Bibliothek ist:
Das Beispiel ist unten angegeben
Das ist so einfach!
quelle
Ich denke auch, dass die derzeit beste Lösung darin besteht, Watch.JS zu verwenden. Hier finden Sie ein nettes Tutorial: Auf Objekt- oder Arrayänderungen in Javascript warten / achten (Ereignis mit geänderter Eigenschaft für Javascript-Objekte)
quelle