javascript变量上是否可能有更改事件?

javascript变量上是否可能有更改事件?,javascript,jquery,variables,onchange,Javascript,Jquery,Variables,Onchange,我声明了一个变量,它通过选择框中的另一个事件获取它的值。由于存在更改变量的不同事件(让我们将其命名为z),因此我希望在变量更改时得到通知 所以我的问题是:当一个变量发生变化时,最好的方法是什么? z.change(函数(){})抛出一个错误 如果没有隐藏的输入字段或其他类似的帮助程序,有什么方法可以做到这一点呢?这实际上是不可能的,但有些浏览器支持getter和setter,有了它们,您就可以实现在遇到值时调用外部函数的功能。如果您希望在所有浏览器中都能使用此功能,则可以采用传统的方式: var

我声明了一个变量,它通过选择框中的另一个事件获取它的值。由于存在更改变量的不同事件(让我们将其命名为
z
),因此我希望在变量更改时得到通知

所以我的问题是:当一个变量发生变化时,最好的方法是什么?
z.change(函数(){})抛出一个错误


如果没有隐藏的输入字段或其他类似的帮助程序,有什么方法可以做到这一点呢?

这实际上是不可能的,但有些浏览器支持getter和setter,有了它们,您就可以实现在遇到值时调用外部函数的功能。如果您希望在所有浏览器中都能使用此功能,则可以采用传统的方式:

var Item = function (val) {
    this._val = val;
}

Item.Prototype.setValue = function (val) { 
    this._val = val;
    // call external function here!
}
Item.Prototype.getValue = function () {
    return this._val;
}

然后请始终记住仅通过这些函数访问属性。

您应该感兴趣的是,哪种方法不如SpiderMonkey的方法完整,但实际有效。

尝试以下方法:

var book = {
    _year: 2004,
    edition: 1
};
Object.defineProperty(book, "year", {
    get: function(){
        return this._year;
    },
    set: function(newValue){
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
        }
    }
});
book.year = 2005;
alert(book.edition); 

我用这个方法写了一个双向模型视图绑定jquery插件jQueryMV。

谢谢,看起来很不错,但这是原型的方式,对吗?因为我正在使用jQuery。我将尝试重写。是的,这只是为了显示一些代码-将其修改为您使用的任何框架:-)@Tim-不,这不是
Prototype
framework,它只是普通的Javascript,没有检测到框架@里格尔-是的,没错。这都是因为原型框架这个令人恼火的名字——我的例子是原型继承,javascript本身提供的那种继承,没有框架。@AHM,@Tim-。