2014-03-25 38 views
0

我目前正在使用HTML5和Javascript進行遊戲。現在,我正在添加聲音,並且還需要經典的「打開/關閉音樂」和「打開/關閉聲音」按鈕。我不想跟蹤所有的音頻對象,並且每次設置其中一個按鈕時都會循環播放它們,所以我宣佈了兩個全局布爾值,音樂和聲音,都默認爲true。當它們成立時,它們各自的音頻對象將播放,如果它們是錯誤的,則它們不會播放。變量更新的Javascript回調

這對於創建對象很簡單,只需要簡單的if語句即可。但是,如果我想在創建後更改對象的狀態,如果用戶更改了任一設置,則會變得不方便。我希望能夠把一個回調的布爾值,實際上是說:(僞)

var music = true; 

class Music() { 
    this.audio = new Audio(fileName); 

    music.onUpdate(function() { 
     if(music) { 
      this.audio.play(); 
     } else { 
      this.audio.pause(); 
     } 
    } 

    if(music) { 
     this.audio.play(); 
    } 
} 

此外,它甚至會更好,如果我能級聯這些,所以那幾個的回調可以註冊到相同的變量。我明白,這不是需要定期完成的事情,但是在我徹底改寫這個項目之前,是否有一個簡單的語言功能可以用來實現這一點?

感謝

+0

這已經回答在 http://stackoverflow.com/questions/1759987/listening-for-variable-changes-in-javascript-or-jquery –

回答

0

可以住變量在實現一個簡單的事件處理機制的對象,這裏有一個例子:

var variable = { 
    _value: true, 
    set: function(value) { 
    if (value !== this._value) { 
     this._value = value; 
     for (var i = 0; i < this._callbacks.length; i++) { 
     this._callbacks[i](value); 
     } 
    } 
    }, 
    get: function() { return this._value; }, 

    _callbacks: [], 
    onChange: function(callback) { 
    this._callbacks.push(callback); 
    }, 
    offChange: function(callback) { 
    // Find the callback and remove it from the _callbacks array. 
    // If !callback, this._callbacks = []; 
    } 
} 

// Usage: 
variable.onChange(function(value) { console.log(value); }); 

variable.set(false); // 'false' logged to the console 
variable.set(false); // nothing is logged to the console 

您可以使用的onChange方法添加多個監聽器。當值改變時,所有這些將被調用。您可以使用offChange方法刪除事件偵聽器。爲了完整性,我添加了它。

您可以通過使用支持Observable對象的庫來獲得此開箱即用的功能。如果您環顧四周,還有許多可用的功能,但還包含許多您可能不需要的功能。