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が定義されている2行目にエラーがあると言っています。構文エラーは何ですか?soundManager.play(nameOfSound)を呼び出してoggファイルを再生できるように設定しようとしています。

ありがとうございました。

-ニック

4

2 に答える 2

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 ミニファイアーを使用すると、すべて_explode の と_coinが最小化されるため、より「圧縮された」サイズを取得できます。

于 2012-12-05T05:29:05.077 に答える
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;
            }
        };
    };
})();

このようにクロージャを使用すると、メソッドだけがおよび変数playにアクセスできます。_explode_coin

于 2012-12-05T05:18:49.477 に答える