所有浏览器都支持Object.watch()吗?

26 浏览
0 Comments

所有浏览器都支持Object.watch()吗?

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


我正在寻找一种简单的方法来监视对象或变量的更改,并且我发现在Mozilla浏览器中支持Object.watch(),但不支持IE。于是我开始四处寻找是否有人可以写出等效的方式。

我所找到的唯一东西就是一个jQuery插件,但是我不确定这是否是最好的方法。我当然在大多数项目中使用jQuery,所以我不担心jQuery方面的问题...

问题是:有人能给我展示一份这个jQuery插件的工作示例吗?我在使用它时遇到了问题...

或者,有人知道任何更好的跨浏览器的替代方法吗?

回答后的更新

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

但我似乎无法让它在IE中工作。下面的代码在Firefox中运行良好,但在IE中无效。在Firefox中,每当更改watcher.status时,watcher.watch()中的document.write()被调用,您可以在页面上看到输出。在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 + "
");
  return newValue;
});
watcher.status = 'asdf';
watcher.status = '1234';
document.write(watcher.status + "
");

admin 更改状态以发布 2023年5月23日
0
0 Comments

这个插件只是使用一个计时器/间隔来重复检查对象的变化。也许好用,但我个人更希望作为观察者有更多的即时性。

这里尝试将 watch/unwatch 带到IE中:http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html

它改变了从Firefox中添加观察者的语法。不再是:

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

而是:

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

不太美观,但作为观察者,你会立即收到通知。

0
0 Comments

(抱歉,会在几个网站同时发布此回答,但我在类似问题上提供的解答也可应用于此)

我之前创建了一个小的对象监视的模拟,在一段时间内在 IE8、Safari、Chrome、Firefox、Opera 等浏览器上都有效。

0