JS中有没有办法将函数“绑定”到变量的状态?

时间:2011-10-12 14:22:45

标签: javascript jquery binding

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

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

(或者这是一个坏主意......)

4 个答案:

答案 0 :(得分:2)

你可以使用这样的setter: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

答案 1 :(得分:1)

您可以使用watch中的Object.prototype功能。

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

有关详细信息,请参阅此answer

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我怀疑你想要的变量无法做到。相反,您可以通过getter / setter或属性与对象成员一起完成。这些概念在面向对象编程中非常普遍。以下是一些提示: