2013-10-30 50 views
0

我想在每次變量增加時觸發一個事件。那可能嗎?將事件綁定到++運算符

var a = 0; 

// if this variable gets incremented ++ to 1, I want to trigger an event. 
// how can I create listener for it? 

Google沒有幫助。

+1

原始類型不可能。只有在指定了另一個增量方法的情況下才可能使用這些對象。你想完成什麼? –

+1

一個骯髒的,可怕的,不可靠和不可靠的方法是監視setTimeout循環中的變量 – xbonez

+0

我想要一個私有函數在這個變量增量時自動觸發。 – amit

回答

1

直接喜歡你的例子,這是不可能的。

但是,如果該值是一個對象,你可以使用一個setter使用defineProperty知道,當值變化:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

最後,你可以使用能夠聽取他們對對象的更改Object.observehttp://updates.html5rocks.com/2012/11/Respond-to-change-with-Object-observe


支持傳統瀏覽器

注意認爲defineProperty不適用於舊版瀏覽器。

如果您需要支持舊版本,您可以創建一個界面來更改對象值並在方法上執行您想要的操作(如myInt.increment())。 (這種模式在Backbone,Ember和其他內部使用)

或者你可以通過運行循環(setTimeout)並將新值與緩存的舊值進行比較來做一些髒檢查...(這是解決方案花費的Angular.js)

+0

我不認爲Object.observe適用於舊版瀏覽器。 – amit

+0

我添加了對舊支持的評論,如果這是你的要求。 –

+0

哇,Angular在循環中使用輪詢?這很好 – Kos