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对象上的属性更改事件)