【问题标题】:How to run a function in JavaScript every time a variable changes?每次变量更改时如何在 JavaScript 中运行函数?
【发布时间】:2011-03-12 12:36:40
【问题描述】:

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

谢谢。

【问题讨论】:

  • setters 是“帮助者”,可以解析要首先设置的变量。不确定您对代码有哪些可能性和控制级别,但您可以在 setter 中调用该函数。

标签: javascript function variables


【解决方案1】:

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

不过,这是一个肮脏的把戏。

【讨论】:

  • +1 正如你所说,它很脏。一点都不好看。但是没有其他选择,在正确的情况下,它可能会起作用:)
  • um .. 我想如果你真的想要丑陋且可能有错误的代码,这将适用于较小的应用程序.. 因为仍然有一个小窗口,其中变量是“新”值但函数有没有运行,我应该预料到,这会在某些情况下产生错误。这种方法,总而言之,不应该被青睐,如果你看不出来,先生/女士。偶然的观察者,他们可能会或可能不会阅读此评论。我只是建议制作一个像 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 这样的对象并使用 getter/setter 函数。
  • @dylnmc....这就是为什么他说“在正确的情况下”。你是那些批评人们在这个网站上所说的一切的人之一。就个人而言,这可能是一个可行的解决方案。
【解决方案2】:

我不认为你的要求是可能的。

解决方案可能是:

  • 将您的数据封装到特定对象中
  • 使用该对象的 setter 方法访问该数据
  • 同时拥有该 setter 方法:
    • 设置数据
    • 调用你的函数

但这需要你重写一些代码。

【讨论】:

  • 我认为这也是最简单的方法。也许有些框架也有类似的功能。
【解决方案3】:

由于 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]);

我个人不太喜欢向基础原型添加新方法,但它使事情在短期内更容易重构。

【讨论】:

  • 是的,这可能比创建一个全新的对象更容易和更好,如果你只需要使用一个数组来做到这一点。好想法
【解决方案4】:

使用object.watchdocs,如果本机不支持,请查看此实现:Object.watch() for all browsers?

【讨论】:

【解决方案5】:

在 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 的 getter/setter。

【讨论】:

    猜你喜欢
    • 2023-01-04
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2022-08-18
    • 1970-01-01
    • 2022-11-26
    相关资源
    最近更新 更多