Object.watch() 适用于所有浏览器?

2022-08-30 05:01:16

请注意,Object.WatchObject.Observe 现在都已弃用(截至 2018 年 6 月)。


我正在寻找一种简单的方法来监视对象或变量的更改,我发现Mozilla浏览器支持,但IE不支持。所以我开始四处寻找,看看是否有人写过某种等价物。Object.watch()

我唯一发现的是一个jQuery插件,但我不确定这是否是最好的方法。我当然在我的大多数项目中都使用jQuery,所以我不担心jQuery方面......

无论如何,问题是:有人可以给我看一个jQuery插件的工作示例吗?我在使它工作时遇到问题...

或者,有没有人知道任何更好的替代方案可以跨浏览器工作?

回答后更新

感谢大家的回应!我尝试了这里发布的代码:http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html

但我似乎无法让它与IE一起使用。下面的代码在Firefox中工作正常,但在IE中不执行任何操作。在Firefox中,每次更改时,都会调用in,您可以在页面上看到输出。在IE中,这种情况不会发生,但我可以看到这是在更新值,因为最后一次调用显示了正确的值(在IE和FF中)。但是,如果不调用回调函数,那么这有点毫无意义......:)watcher.statusdocument.write()watcher.watch()watcher.statusdocument.write()

我错过了什么吗?

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>");

答案 1

(很抱歉交叉发布,但我对类似问题的回答在这里工作正常)

不久前,我为此创建了一个小的 object.watch 填充程序。它适用于IE8,Safari,Chrome,Firefox,Opera等。


答案 2

该插件只是使用计时器/间隔来重复检查对象上的更改。也许足够好,但就我个人而言,我希望作为观察者更加直接。

以下是将/带到IE的尝试:http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.htmlwatchunwatch

它确实改变了Firefox添加观察者的语法。而不是:

var obj = {foo:'bar'};
obj.watch('foo', fooChanged);

是吗:

var obj = {foo:'bar'};
var watcher = createWatcher(obj);
watcher.watch('foo', fooChanged);

不是那么甜蜜,但作为观察者,你会立即得到通知。