2010-09-29 106 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

相關問題