Обратите внимание, что Object.Watch
и Object.Observe
оба являются устаревшими (по состоянию на июнь 2018 г.).
Я искал простой способ отслеживать изменения объекта или переменной и обнаружил Object.watch()
, что он поддерживается браузерами Mozilla, но не IE. Так что я начал искать, не написал ли кто-нибудь что-нибудь эквивалентное.
Единственное, что я нашел, это плагин jQuery , но я не уверен, что это лучший способ. Я, конечно, использую jQuery в большинстве своих проектов, поэтому меня не беспокоит аспект jQuery ...
В любом случае, вопрос: может ли кто-нибудь показать мне рабочий пример этого плагина jQuery? У меня проблемы с его работой ...
Или кто-нибудь знает какие-нибудь лучшие альтернативы, которые будут работать в кросс-браузере?
Обновление после ответов :
Спасибо всем за ответы! Я попробовал код, размещенный здесь: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html
Но я не мог заставить его работать с IE. Приведенный ниже код отлично работает в Firefox, но ничего не делает в IE. В Firefox каждый раз при watcher.status
изменении вызывается document.write()
in, watcher.watch()
и вы можете увидеть результат на странице. В IE этого не происходит, но я вижу, что watcher.status
происходит обновление значения, потому что последний document.write()
вызов показывает правильное значение (как в IE, так и в FF). Но, если функция обратного вызова не вызывается, это бессмысленно ... :)
Я что-то упускаю?
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>");
источник
Ответы:
(Извините за перекрестную публикацию, но этот ответ, который я дал на аналогичный вопрос, здесь отлично работает)
Некоторое время назад я создал для этого небольшую прокладку object.watch . Он работает в IE8, Safari, Chrome, Firefox, Opera и т. Д.
источник
Object.defineProperty()
существует. В итоге я посмотрел ссылку на MDN, чтобы узнать, как это работает.Этот плагин просто использует таймер / интервал для многократной проверки изменений объекта. Может быть, достаточно хорошо, но лично я хотел бы больше непосредственности в качестве наблюдателя.
Вот попытка перенести
watch
/unwatch
в IE: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html .Он действительно меняет синтаксис способа добавления наблюдателей в Firefox. Вместо того :
Вы делаете:
Не так мило, но как наблюдатель вы сразу же получите уведомление.
источник
Ответы на этот вопрос немного устарели. Object.watch и Object.observe устарели и не должны использоваться.
Сегодня вы можете использовать объект Proxy для отслеживания (и перехвата) изменений, внесенных в объект. Вот простой пример:
Если вам нужно наблюдать за изменениями, внесенными во вложенный объект, вам необходимо использовать специализированную библиотеку. Я опубликовал Observable Slim, и он работает так:
источник
Текущий ответ
Используйте новый объект Proxy , который может отслеживать изменения своей цели.
Старый ответ от 2015 года
Вы могли использовать Object.observe () из ES7 . Вот полифилл. Но Object.observe () теперь отменен . Простите народ!
источник
Обратите внимание, что в Chrome 36 и выше вы также можете использовать
Object.observe
. Фактически это часть будущего стандарта ECMAScript, а не специфическая для браузера функция, такая как MozillaObject.watch
.Object.observe
работает только со свойствами объекта, но намного более производительно, чемObject.watch
(который предназначен для целей отладки, а не для производственного использования).источник
вы можете использовать Object.defineProperty .
смотреть собственность
bar
вfoo
источник
Я использовал Watch.js в одном из своих проектов. И она работает нормально. Одно из главных преимуществ использования этой библиотеки:
Пример приведен ниже
Это так просто!
источник
Я также думаю, что прямо сейчас лучшим решением является использование Watch.JS, найдите здесь хороший учебник: Слушайте / следите за изменениями объекта или массива в Javascript (событие изменения свойства для объектов Javascript)
источник