我有以下代码:
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
答案 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
个变量。