猿问

所有浏览器的Object.Watch()?

所有浏览器的Object.Watch()?

请注意Object.WatchObject.Observe现在都被否决了(2018年6月)。


我在寻找一种简单的方法来监视对象或变量的变化,我发现Object.watch(),这在Mozilla浏览器中是支持的,但不支持IE。所以我开始四处寻找,看看有没有人写过类似的东西。

我发现的唯一件事就是jQuery插件但我不确定这是不是最好的方法。我当然在我的大多数项目中使用jQuery,所以我不担心jQuery方面.

总之,问题是:有人能给我看一个jQuery插件的工作示例吗?我很难让它起作用.。

或者,有没有人知道有什么更好的选择可以跨浏览器工作?

回答后更新:

谢谢大家的回复!我试用了这里发布的代码:http:/webreflection.blogpot.com/2009/01/internet-Explorer-Object-Wat.html

但我似乎无法使它与IE一起工作。下面的代码在Firefox中运行良好,但在IE中什么也不做。在Firefox中,每次watcher.status被更改,则document.write()在……里面watcher.watch()调用,您可以在页面上看到输出。在IE中,这种情况不会发生,但我可以看到watcher.status是更新值,因为最后一个document.write()Call显示正确的值(在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>");


RISEBY
浏览 593回答 3
3回答

郎朗坤

我创造了一个小的物体,注意垫片一段时间前的事。它适用于IE8、Safari、Chrome、Firefox、Opera等。

墨色风雨

当前答案使用新的代理对象,它可以监视对其目标的更改。let&nbsp;validator&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;set:&nbsp;function(obj,&nbsp;prop,&nbsp;value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(prop&nbsp;===&nbsp;'age')&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!Number.isInteger(value))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;TypeError('The&nbsp;age&nbsp;is&nbsp;not&nbsp;an&nbsp;integer'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;>&nbsp;200)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;RangeError('The&nbsp;age&nbsp;seems&nbsp;invalid'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;default&nbsp;behavior&nbsp;to&nbsp;store&nbsp;the&nbsp;value &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj[prop]&nbsp;=&nbsp;value; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Indicate&nbsp;success &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;}};let&nbsp;person&nbsp;=&nbsp;new&nbsp;Proxy({},&nbsp;validator);person.age&nbsp;=&nbsp;100;console.log(person.age);&nbsp;//&nbsp;100person.age&nbsp;=&nbsp;'young';&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Throws&nbsp;an&nbsp;exceptionperson.age&nbsp;=&nbsp;300;&nbsp;//&nbsp;Throws&nbsp;an&nbsp;exception
随时随地看视频慕课网APP
我要回答