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-。