需要帮助找出音频的语法错误

时间:2012-12-05 05:16:05

标签: javascript html5-audio

我有以下代码:

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文件。

谢谢。

-Nick

2 个答案:

答案 0 :(得分: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无法访问,而且在使用Google Closure Compiler等JS minifiers时也可以获得更“压缩”的大小,因为所有_explode和{ {1}}将被最小化。

答案 1 :(得分: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;
        }
    }
}

要稍后访问此内容,您可以使用以下内容 -

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

您可以按照@ Passerby的建议进一步改进您的代码 -

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;
            }
        };
    };
})();

以这种方式使用closures,只有play方法才能访问_explode_coin个变量。