8

基本的に、これはローカル スコープ ハンドラにアクセスする方法に関する質問です。次のようなグローバル変数定義に似たものを達成しようとしています:

window['newObject'] = "some string";
alert(newObject);

ただし、ローカルスコープの場合。現在、私が持っている唯一の解決策は、評価を使用することです:

eval("var newObject='some string'");

しかし、これは本当に醜い解決策です...最良の方法は、window[]ソリューションのようにローカルスコープへの参照を使用するようなものですが、ローカルスコープへの参照は聞いたことがありません...何かアイデアはありますか?

例は次のとおりです。

function x(arg)
{
   localScope[arg.name]=arg.value;
   alert(sex);
}

x({name:"sex", value:"Male"});
4

8 に答える 8

6

あなたが探しているのはcall objectと呼ばれるものです。しかし、これによると、直接アクセスすることはできないので、運が悪い.

于 2009-07-13T15:00:58.143 に答える
1

名前付き引数のトリックを試すことができます
編集:これはクロスブラウザではありません

function x( {sex:sex, height:height} ) {
    alert( sex );
    alert( height );
}

x( { sex: 'male', height: 'short' } );
x( { height: 'medium', sex: 'female' } );

// male
// short
// female
// medium
于 2009-07-13T13:57:41.733 に答える
1

ローカル スコープでオブジェクトを作成し、それを動的に作成する変数のコンテナーとして使用してみませんか?

function x(arg)
{
    var localSpace = {};
    localSpace[arg.name] = arg.value;
}
于 2009-07-13T13:20:29.503 に答える
0

興味深い質問です。このようなことは考えたことがありません。しかし、ユースケースは何ですか?

このようなことをしたい理由は、変数の名前がわからない場合です。しかし、その場合、変数に再度アクセスする唯一の方法は、同じ参照オブジェクトを使用することです。つまり、古いオブジェクトを使用してデータを保存できます。

このような参照オブジェクトからの読み取りは、デバッグ目的で興味深いものですが、なぜそれに書き込みたいのかわかりません。

編集:

sexあなたが投稿した例では、アラートに名前がハードコーディングされているため、ローカルスコープへのアクセスの必要性を確信できません。これは次のように実装できます。

function x(arg)
{
  container = {};
  container[arg.name] = arg.value;
  alert(container.sex);
}

例について詳しく説明していただけますか?

于 2009-07-13T13:19:43.623 に答える
-1

私はあなたの質問を完全に理解しているとは言えません。クラスxを作成するとき、私は通常これを行います:

function x(args) {
  var _self = this;

  _self.PriviledgedMethod(a) {
      // some code
  }

  function privateMethod(a) {
      // some code
  }
}

var newObject = new x(args);

含まれている関数によって閉じられているため、引き続き_selfとargsにアクセスできます。

于 2009-07-13T13:26:55.703 に答える