4

グローバル名前空間をクリーンに保つために、私のJavaScriptコードは次のようにラップされています。

(function() {
    /* my code */
})();

これで、変数変数名を使用してアクセスしたいいくつかの変数がこのスコープで宣言されました(たとえば、名前は'something' + someVar)。グローバルスコープでは、単に使用window['varname']しますが、明らかにそれは機能しません。

私がやりたいことをする良い方法はありますか?そうでない場合は、これらの変数をオブジェクト内に配置して、配列表記を使用することができます...

注:eval('varname')は許容できる解決策ではありません。だからそれを提案しないでください。

4

3 に答える 3

8

thisは無名関数を指していないため、これは良い質問です。それ以外の場合は、明らかにthis['something'+someVar]. arguments.callee内部変数は関数のプロパティではないため、非推奨を使用してもここでは機能しません。ホルダーオブジェクトを作成して、あなたが説明したことを正確に行う必要があると思います...

(function() {
  var holder = { something1: 'one', something2: 2, something3: 'three' };

  for (var i = 1; i <= 3; i++) {
    console.log(holder['something'+i]);
  }
})();
于 2011-02-05T14:34:35.337 に答える
2
(function(globals) {
    /* do something */
    globals[varname] = yourvar;
})(yourglobals);
于 2011-02-05T13:52:26.087 に答える
1

悪の解決策/ハック:必要な変数をヘルパー オブジェクトobjに配置し、 use with(obj){ your current code ... }を使用して、現在の使用をドット表記に変更する必要がないようにします。

于 2011-02-05T14:47:05.710 に答える