JavaScript中有一种方法可以让事件像监听变量中的变化一样吗?所以当它的值被修改时,事件触发,然后我可以调用一个函数。为了更好地理解上下文,我有一个处理对象数组的html呈现的函数,并且我希望每次修改数组时都会自动调用该函数。如何在每次变量更改时在JavaScript中运行函数?
谢谢。
JavaScript中有一种方法可以让事件像监听变量中的变化一样吗?所以当它的值被修改时,事件触发,然后我可以调用一个函数。为了更好地理解上下文,我有一个处理对象数组的html呈现的函数,并且我希望每次修改数组时都会自动调用该函数。如何在每次变量更改时在JavaScript中运行函数?
谢谢。
使用object.watch
docs,如果不支持它本身看这个实施:Object.watch() for all browsers?
请注意,watch方法已被弃用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch – 2017-12-12 20:02:33
我不认为你问的是可能的。
一个解决办法是:使用该对象的setter方法的数据
但它会要求你重写一下你的代码。
这就是最简单的方法来做到这一点,我想也是。也许有些框架也有类似的功能。 – Chris 2011-03-12 12:41:44
你可以使用setInterval
来这么多次检查其值的第二,并保存到一个单独的变量。您可以每次检查实际变量是否与另一个变量不同。在这种情况下,请调用该函数。
虽然这是一个肮脏的伎俩。
+1这很脏,就像你说的那样。一点都不好。但没有其他选择,在正确的情况下,它可能只是工作:) – 2011-03-12 12:46:06
嗯..我想这可以在较小的应用程序中工作,如果你真的想要丑陋和潜在的错误代码..因为仍然有一个小窗口,其中变量是一个“新”值,但该函数尚未运行,我预料这会在某些情况下产生错误。总之,这种方法不应该受到欢迎,如果你不能说的话,先生/女士。随便的观察者,他可能会或可能不会读这个评论。我只是建议制作一个像https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype这样的对象,并使用getter/setter函数。 – dylnmc 2017-10-25 16:05:44
在ECMAScript中5有的getter/setter属性...在这里阅读:http://ejohn.org/blog/ecmascript-5-objects-and-properties/
非IE浏览器都支持类似的东西:
http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/
对于IE浏览器,你将不得不等待对于IE9,或者只使用DOM基础的获取者/设置者。
因为JavaScript并不普遍支持setter/getter方法,所以我建议您考虑一下如何设置变量。一种技术,将工作是:
Array.prototype.setMember = function(index,newValue) {
alert("I will perform some action here");
this[index] = newValue;
}
var myArray = [1,2,3];
// x[0] = 11; // Don't do this any more
x.setMember(0,11);
alert(x[0]);
我个人不增加新的方法,以基础原型的一个巨大的风扇,但是它使事情变得更容易在短期内重构。
是的,如果你只需要用一个数组来做这件事,这可能比制作一个全新的对象更容易和更好。好想法 – dylnmc 2017-10-25 16:15:02
'setters'是'助手',它可以解析变量以便首先设置。不知道你的代码有什么可能性和什么级别的控制,但是在setter中你可以调用这个函数。 – pimvdb 2011-03-12 12:40:35