【问题标题】:Is there any way in JS to 'bind' a function to a variable's state?JS中有什么方法可以将函数“绑定”到变量的状态?
【发布时间】:2011-10-12 14:22:44
【问题描述】:

类似于绑定事件,而是更改变量。是通过为每个变量创建一个 set() 函数来促进这一点的唯一方法,还是可以将侦听器绑定到变量?

我发现自己在多个函数中围绕变量编写 if 语句,以检查它们的状态。我希望在该变量发生变化时触发一个函数。

(或者这是个坏主意……)

【问题讨论】:

  • 可以发一段代码吗?
  • 我认为你应该做的是用一个对象替换你的变量,并用一个 setter 方法设计这个对象,该方法运行你想要的任何代码,同时它的属性发生变化。
  • 不太确定,但你可以试试documentcloud.github.com/backbone
  • 是的,我知道我可以包含一个 setter,尽管这需要重写大量代码。我想知道是否有任何内置的 Javascript 或 jQuery 可以促进这一点。从我目前看到的情况来看,我认为答案是“不”。实际上,我计划在我的项目的下一次迭代中实施 Backbone——我可能会让 Backbone 为我处理它。感谢迄今为止所有有用的答案和建议!

标签: javascript jquery binding


【解决方案1】:

您可以像这样使用设置器:http://jsfiddle.net/DeyCP/1/

var obj = (function(func) {
    var variable;

    return {
        get something() {
            return variable;
        },

        set something(value) {
            variable = value;
            func();
        }
    };
})(function() {
    alert(123);
});

那么,

obj.something = 'foo'; // alerts 123
obj.something;         // returns foo

【讨论】:

    【解决方案2】:

    您可以使用Object.prototype 中的watch 函数。

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch

    请参阅此answer 了解更多信息。

    【讨论】:

      【解决方案3】:

      在许多情况下这是可能的,也是可行的选择。正如@John 所指出的,您可以watchunwatch JavaScript 中的对象的属性。但是,这只适用于 Firefox。相反,我建议您使用 getter 和 setter 来实现您想要的结果,正如@pimvdb 指出的那样。但是请注意,这两种选择都仅适用于对象的属性(如果将它们视为属性,则还可以使用全局变量)。您无法在局部变量上获得相同的结果。

      【讨论】:

        【解决方案4】:

        我怀疑你想要的不能用变量来完成。相反,您可以通过 getter/setter 或属性对对象成员执行此操作。这些概念在面向对象编程中很常见。这里有一些提示:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-08
          • 2020-05-31
          • 1970-01-01
          • 1970-01-01
          • 2019-01-24
          • 1970-01-01
          • 1970-01-01
          • 2015-12-26
          相关资源
          最近更新 更多