2011-03-12 100 views
6

JavaScript中有一种方法可以让事件像监听变量中的变化一样吗?所以当它的值被修改时,事件触发,然后我可以调用一个函数。为了更好地理解上下文,我有一个处理对象数组的html呈现的函数,并且我希望每次修改数组时都会自动调用该函数。如何在每次变量更改时在JavaScript中运行函数?

谢谢。

+0

'setters'是'助手',它可以解析变量以便首先设置。不知道你的代码有什么可能性和什么级别的控制,但是在setter中你可以调用这个函数。 – pimvdb 2011-03-12 12:40:35

回答

7

使用object.watchdocs,如果不支持它本身看这个实施:Object.watch() for all browsers?

+1

请注意,watch方法已被弃用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch – 2017-12-12 20:02:33

6

我不认为你问的是可能的。

一个解决办法是:使用该对象的setter方法的数据

  • 封装你的数据到一个特定的对象
  • 访问
  • 有setter方法都:
    • 集数据
    • 致电您的功能

但它会要求你重写一下你的代码。

+0

这就是最简单的方法来做到这一点,我想也是。也许有些框架也有类似的功能。 – Chris 2011-03-12 12:41:44

1

你可以使用setInterval来这么多次检查其值的第二,并保存到一个单独的变量。您可以每次检查实际变量是否与另一个变量不同。在这种情况下,请调用该函数。

虽然这是一个肮脏的伎俩。

+0

+1这很脏,就像你说的那样。一点都不好。但没有其他选择,在正确的情况下,它可能只是工作:) – 2011-03-12 12:46:06

+0

嗯..我想这可以在较小的应用程序中工作,如果你真的想要丑陋和潜在的错误代码..因为仍然有一个小窗口,其中变量是一个“新”值,但该函数尚未运行,我预料这会在某些情况下产生错误。总之,这种方法不应该受到欢迎,如果你不能说的话,先生/女士。随便的观察者,他可能会或可能不会读这个评论。我只是建议制作一个像https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype这样的对象,并使用getter/setter函数。 – dylnmc 2017-10-25 16:05:44

1

因为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]); 

我个人不增加新的方法,以基础原型的一个巨大的风扇,但是它使事情变得更容易在短期内重构。

+0

是的,如果你只需要用一个数组来做这件事,这可能比制作一个全新的对象更容易和更好。好想法 – dylnmc 2017-10-25 16:15:02

相关问题