2012-12-05 138 views
0

找出語法錯誤,我有以下代碼:需要幫助的音頻

var soundManager = { 
    var _explode = new Audio('/Content/sounds/explosion.ogg'); 

    var _coin = new Audio('/Content/sounds/coin.ogg'); 
    this.play = function (name){ 
     switch(name){ 
      case "explosion": 
       _explode.play(); 
       break; 
      case "coin": 
       _coin.play(); 
       break; 
     } 
    }; 
}; 

Chrome的說,我對下聯,其中_explode定義錯誤。什麼是語法錯誤?我正在設置它,所以我可以調用soundManager.play(nameOfSound)讓它播放一個ogg文件。

謝謝。

- 尼克

回答

1

你不能在對象文字中寫這樣的語句。請嘗試以下 -

var soundManager = { 
    _explode: new Audio('/Content/sounds/explosion.ogg'), 
    _coin: new Audio('/Content/sounds/coin.ogg'), 

    play: function (name){ 
     switch(name){ 
      case "explosion": 
       this._explode.play(); 
       break; 
      case "coin": 
       this._coin.play(); 
       break; 
     } 
    } 
} 

以後要進入這一點,你可以使用類似下面 -

var soundManager = (function() { 
    var _explode = new Audio('/Content/sounds/explosion.ogg'); 
    var _coin = new Audio('/Content/sounds/coin.ogg'); 

    return { 
     play: function (name) { 
      switch (name) { 
       case "explosion": 
        _explode.play(); 
        break; 
       case "coin": 
        _coin.play(); 
        break; 
      } 
     }; 
    }; 
})(); 

-

soundManager.play('explosion'); 
soundManager.play('coint'); 

您還可以通過以下@路人的建議下改進代碼使用closures這種方式,只有play方法將有權訪問_explode_coin變量。

+0

工作。謝謝。 – Nikhil

2

正如@SayemAhmed所說,創建對象文字的語法不正確。他的回答是正確的。

這裏是我的首選方式,使_explode_coin「真」私人:

var soundManager=(function(){ 
    var _explode=new Audio('/Content/sounds/explosion.ogg'); 
    var _coin=new Audio('/Content/sounds/coin.ogg'); 
    return { 
    play:function(name){ 
     switch(name){ 
     case "explosion": 
      _explode.play(); 
      break; 
     case "coin": 
      _coin.play(); 
      break; 
     } 
    } 
    }; 
})(); 

現在不僅_explode_coin變得不可訪問,但使用JS時,你還可以得到更多的「壓縮」大小像谷歌閉合編譯器,因爲所有_explode_coin將最小化。