所有浏览器都支持Object.watch()吗?
所有浏览器都支持Object.watch()吗?
请注意,Object.Watch
和Object.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 + " ");
这个插件只是使用一个计时器/间隔来重复检查对象的变化。也许好用,但我个人更希望作为观察者有更多的即时性。
这里尝试将 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);
不太美观,但作为观察者,你会立即收到通知。
(抱歉,会在几个网站同时发布此回答,但我在类似问题上提供的解答也可应用于此)
我之前创建了一个小的对象监视的模拟,在一段时间内在 IE8、Safari、Chrome、Firefox、Opera 等浏览器上都有效。