请注意,Object.Watch
和Object.Observe
现已弃用(截至2018年6月)。
我一直在寻找一种简单的方法来监视对象或变量的变化,我发现了Object.watch()
,Mozilla浏览器支持它,但不支持IE。所以我开始四处寻找,看看是否有人写过类似的东西。
我发现的唯一的东西是a jQuery plugin,但我不确定这是否是最好的方法。我当然在我的大多数项目中使用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 + "<br>");
return newValue;
});
watcher.status = 'asdf';
watcher.status = '1234';
document.write(watcher.status + "<br>");
9条答案
按热度按时间fruv7luv1#
(抱歉交叉发布,但我对类似问题的回答在这里很好)
不久前,我为此创建了一个小object.watch shim。它可以在IE8,Safari,Chrome,Firefox,Opera等。
bhmjp9jg2#
该插件只是使用一个定时器/间隔来重复检查对象的更改。也许足够好,但我个人希望作为一个观察者更直接。
以下是将
watch
/unwatch
引入IE的尝试:http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html。它确实改变了Firefox添加观察者的语法。而不是:
您需要:
不是那么甜蜜,但作为一个观察者,你会立即得到通知。
5lhxktic3#
这个问题的答案有点过时了。Object.watch和Object.observe都已弃用,不应使用。
现在,您可以使用Proxy对象来监视(和拦截)对对象所做的更改。下面是一个基本的例子:
如果需要观察对嵌套对象所做的更改,则需要使用专用库。我发布了**Observable Slim**,它是这样工作的:
doinxwow4#
当前答案
使用新的Proxy对象,它可以监视其目标的更改。
2015年的旧答案
您可以使用Object.observe() from ES7。Here's a polyfill.但是Object.observe() is now cancelled。对不起的人!
vsnjm48y5#
请注意,在Chrome 36及更高版本中,您也可以使用
Object.observe
。这实际上是未来ECMAScript标准的一部分,而不是像Mozilla的Object.watch
那样的特定于浏览器的功能。Object.observe
只对对象属性起作用,但比Object.watch
性能更高(Object.watch
用于调试目的,而不是生产用途)。ktca8awb6#
你可以使用Object.defineProperty。
查看
foo
中的属性bar
a5g8bdjr7#
我在一个项目中使用了Watch.js。它运行良好。使用这个库的主要优点之一是:
“有了Watch.JS,你就不必改变你的开发方式了。
下面给出了示例
就这么简单!
yrefmtwq8#
这对我很有效
fzsnzjdm9#
我也认为现在最好的解决方案是使用Watch.JS,在这里找到一个很好的教程:Listen/Watch for object or array changes in Javascript (Property changed event on Javascript objects)