2010-09-29 158 views
2

我声明一个变量,通过选择框中的另一个事件获取它的值。由于有不同的事件会改变变量(让我们把它命名为z),我希望在变量发生变化时得到通知。是否有可能在javascript变量上发生更改事件?

所以我的问题是:什么是最好的方式得到通知时变量得到改变? z.change(function(){});将引发错误。

有没有办法做到这一点,没有隐藏的输入字段或其他像这样的助手?

回答

2

这是不可能的,但是一些浏览器支持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; 
} 

然后永远记住,只有通过这些功能的访问属性。

+0

谢谢,看起来很不错,但是这是Prototype的做法吧?因为我使用jQuery。我会尝试重写。 – Tim 2010-09-29 08:59:29

+0

是的,这只是为了展示一些代码 - 修改它到你使用的任何框架:-) – AHM 2010-09-29 09:01:30

+1

@Tim - 不,这不是'Prototype'框架,它只是Vanilla Javascript,没有检测到框架。 [这是一个链接](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/prototype)。 – Reigel 2010-09-29 09:22:33

0

试试这个:

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 https://github.com/gonnavis/jQueryMV

相关问题