Należy pamiętać, że oba Object.Watch
i Object.Observe
są obecnie przestarzałe (stan na czerwiec 2018 r.).
Szukałem łatwego sposobu monitorowania obiektu lub zmiennej pod kątem zmian i stwierdziłem Object.watch()
, że jest to obsługiwane w przeglądarkach Mozilla, ale nie w IE. Zacząłem więc rozglądać się po okolicy, żeby sprawdzić, czy ktoś napisał jakiś odpowiednik.
Jedyne, co znalazłem, to wtyczka jQuery , ale nie jestem pewien, czy to najlepszy sposób. Z pewnością używam jQuery w większości moich projektów, więc nie martwię się o aspekt jQuery ...
W każdym razie pytanie: Czy ktoś może mi pokazać działający przykład tej wtyczki jQuery? Mam problem, żeby to zadziałało ...
A może ktoś zna lepsze alternatywy, które działałyby w różnych przeglądarkach?
Zaktualizuj po odpowiedziach :
Dziękuję wszystkim za odpowiedzi! Wypróbowałem kod zamieszczony tutaj: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html
Ale nie mogłem sprawić, by działało z IE. Poniższy kod działa dobrze w przeglądarce Firefox, ale nic nie robi w IE. W przeglądarce Firefox za każdym razem, gdy watcher.status
jest zmieniany, wywoływana jest document.write()
in watcher.watch()
i można zobaczyć wynik na stronie. W IE tak się nie dzieje, ale widzę, że watcher.status
jest to aktualizacja wartości, ponieważ ostatnie document.write()
wywołanie pokazuje poprawną wartość (zarówno w IE, jak i FF). Ale jeśli funkcja zwrotna nie zostanie wywołana, to jest to trochę bezcelowe ... :)
Czy coś mi brakuje?
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>");
źródło
Odpowiedzi:
(Przepraszam za cross-posting, ale ta odpowiedź, której udzieliłem na podobne pytanie, działa tutaj dobrze)
Stworzyłem mały obiekt. Podkładka do zegarka do tego jakiś czas temu. Działa w IE8, Safari, Chrome, Firefox, Opera itp.
źródło
Object.defineProperty()
istnieje. W końcu spojrzałem na odniesienie do MDN, aby zobaczyć, jak to działa.Ta wtyczka po prostu używa licznika czasu / interwału do wielokrotnego sprawdzania zmian w obiekcie. Może wystarczająco dobrze, ale osobiście chciałbym mieć większą bezpośredniość jako obserwator.
Oto próba przeniesienia
watch
/unwatch
do IE: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html .To zmienia składnię ze sposobu dodawania obserwatorów w Firefoksie. Zamiast :
Ty robisz:
Nie tak słodkie, ale jako obserwator jesteś natychmiast powiadamiany.
źródło
Odpowiedzi na to pytanie są nieco nieaktualne. Object.watch i Object.observe są przestarzałe i nie powinny być używane.
Obecnie można teraz używać obiektu Proxy do monitorowania (i przechwytywania) zmian wprowadzonych w obiekcie. Oto podstawowy przykład:
Jeśli chcesz obserwować zmiany wprowadzone w zagnieżdżonym obiekcie, musisz użyć specjalistycznej biblioteki. Opublikowałem Observable Slim i działa tak:
źródło
Aktualna odpowiedź
Użyj nowego obiektu Proxy , który może obserwować zmiany w celu.
Stara odpowiedź z 2015 roku
Mogłeś użyć Object.observe () z ES7 . Oto polyfill. Ale Object.observe () jest teraz anulowana . Przepraszam ludzie!
źródło
Pamiętaj, że w Chrome 36 i nowszych możesz również używać
Object.observe
. W rzeczywistości jest to część przyszłego standardu ECMAScript, a nie funkcja specyficzna dla przeglądarki, taka jak MozillaObject.watch
.Object.observe
działa tylko na właściwościach obiektu, ale jest dużo bardziej wydajny niżObject.watch
(co jest przeznaczone do celów debugowania, a nie do użytku produkcyjnego).źródło
możesz użyć Object.defineProperty .
oglądać nieruchomość
bar
wfoo
źródło
Użyłem Watch.js w jednym z moich projektów. I działa dobrze.Jedną z głównych zalet korzystania z tej biblioteki jest:
Przykład podano poniżej
To takie proste!
źródło
Myślę też, że teraz najlepszym rozwiązaniem jest użycie Watch.JS, tutaj znajdziesz fajny tutorial: Słuchaj / obserwuj zmiany obiektu lub tablicy w Javascript (Zdarzenie Zmiana właściwości na obiektach Javascript)
źródło