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

我正在寻找一种简单的方法来监视一个对象或变量的变化,我发现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 ,都会watcher.status document.write()中的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>"); 

(对不起,交叉发布,但这个答案我给了一个类似的问题在这里工作正常)

我不久前创造了一个小物件 。 它适用于IE8,Safari,Chrome,Firefox,Opera等。

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

这里是一个尝试带来watch / unwatch到IE浏览器: http : unwatch

它确实改变了Firefox添加观察者的方式。 代替 :

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

你做:

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

不是很好,但作为观察员,你立即通知。

2015年末更新

Object.observe()现在被取消。 对不起人!

2015年更新

使用ES7中的Object.observe() 。

这是一个polyfill。

请注意,在Chrome 36及更高版本中,您也可以使用Object.observe 。 这实际上是未来ECMAScript标准的一部分,而不是像Mozilla的Object.watch这样的特定于浏览器的功能。

Object.observe只能在对象属性上工作,但比Object.watch (这是为了调试目的,而不是生产使用)有更多的性能。

 var options = {}; Object.observe(options, function(changes) { console.log(changes); }); options.foo = 'bar'; 

你可以使用Object.defineProperty 。

foo看财产bar

 Object.definedProperty(foo, "bar", { get: function (val){ //some code to watch the getter }, set: function (val) { //some code to watch the setter } }) 

我发现两个人声称已经解决了这个问题:

Crossbrowser Object手表 (声称支持IE,Opera,Safari)

watch()IE中使用prototype.js 缺少JS函数 (?Opera,Safari?)

我也认为现在最好的解决方案是使用Watch.JS,在这里找到一个很好的教程: 监听/监视Javascript中的对象或数组更改(Javascript对象上的属性更改事件)