繁体   English   中英

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

[英]Need help figuring out syntax error with 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文件。

谢谢。

-缺口

就像@SayemAhmed所说的那样,您创建对象文字的语法是错误的。 他的回答是正确的。

这是我首选的方式,将_explode_coin “ true” _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缩小器时,您还可以获得更大的“压缩”大小,因为所有_explode_coin都将被最小化。

您不能以这种方式在对象文字中编写语句。 试试以下-

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

通过这种方式使用闭包 ,只有play方法可以访问_explode_coin变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM