1

前の質問から、私は次のことを知っています:

だから私はリソースクラスを実装しました、今私はそれを拡張し続けて、すべての定数と列挙型を追加したいと思います(またはJSが許す限り...)。

これは私が現在持っているものです:

var resources = {
  // images
  player  : new c_resource("res/player.png"),
  enemies : new c_resource("res/enemies.png"),
  tilemap : new c_resource("res/tilemap.png")
};

そして、これは私がそれを拡張し続けたいものです:

var resources = {
  // images
  player  : new c_resource("res/player.png"),
  enemies : new c_resource("res/enemies.png"),
  tilemap : new c_resource("res/tilemap.png"),

  // enums
  directions : {up:0, right:1, down:2, left:3},
  speeds     : {slow: 1, medium: 3, fast: 5}
};

...

function enemies() {
  this.dir = resources.directions.down; // initialize to down
}

resources.directions.upにアクセスしようとすると、JSスクリプトが燃えるようなコードの山に落ちてしまいます。このコンテキストで列挙型は許可されていますか?許可されていない場合、通常の関数の外部で使用するために列挙型を適切に挿入するにはどうすればよいですか?同様の効果のために、それらをグローバルとして定義しようとしました。


編集:コンマを修正しました...それはそれを転記する際の単なるエラーでした。

Firefoxで実行してコンソールを見ると、というエラーが表示されますresources is undefined

リソース「クラス」はスクリプトの上部で定義されており、function enemies()直接続きます...したがって、私が理解していることから、それはまだスコープ内にあるはずです...

4

3 に答える 3

2

後にコンマが欠落しているtilemap : new c_resource(...)ためresources、適切に割り当てられることはなく、が未定義で宣言されていないためにresources.directions.up失敗します。resources

于 2011-01-06T22:41:34.710 に答える
2

それは動作します:http: //jsfiddle.net/XfurM/2/

JavaScriptでは、列挙型は、リテラル表記を使用して、配列またはオブジェクトを宣言するだけで実現できます。

var weekdays = [
    'Monday',
    'Tuesday', 
    'Wednesday', 
    'Thursday', 
    'Friday', 
    'Saturday', 
    'Sunday'
];  

また

var weekdays = {
    Monday: 1,
    Tuesday: 2,
    Wednesday: 3,
    Thursday: 4,
    Friday: 5,
    Saturday: 6,
    Sunday: 7
};
于 2011-01-07T17:51:26.657 に答える
2

コールスタックは何enemiesですか?あなたはこのようなことをすることができたでしょう:

var foo = {
  bar: 1,
  f_rv: f()
};

function f() {
  return foo.bar;
}

これは、関数を使用するコードの「下」で関数を宣言できるため途中で機能しますが、現時点では構築されていないf()を使用しようとするため、後で失敗します。foo

于 2011-01-07T18:27:52.757 に答える