2012-12-05 118 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将最小化。