32

重複の可能性:
Javascript はオブジェクト名として変数を使用します

JS が文字列を以前に定義されたオブジェクトへの参照として扱うようにするにはどうすればよいですか? 簡略化:

var myObject = new MyObject();

var myString = "myObject";

var wantThisToWork = myString.myproperty;
4

4 に答える 4

44

変数がグローバル スコープにある場合は、グローバル オブジェクトのプロパティとしてアクセスできます。

var a = "hello world";
var varName = "a";
console.log( window[varName] ); // outputs hello world
console.log( this[varName] ); // also works (this === window) in this case

ただし、ローカル変数の場合、唯一の方法は使用することですeval免責事項

function () {
  var a = "hello world";
  var varName = "a";
  console.log( this[varName] ); // won't work
  console.log( eval(varName) ); // Does work
}

動的変数をオブジェクトに入れて、プロパティのようにアクセスできない限り

function () {
  var scope = {
    a: "hello world";
  };
  var varName = "a";
  console.log( scope[varName] ); // works
}
于 2012-06-08T17:27:32.697 に答える
8

機能を使用できますeval

eval(myString).myproperty

ただし、eval には注意してください。ユーザーがこれを入力すると、JavaScript コードが実行されます。

于 2012-06-08T17:23:51.303 に答える
7

私のように思える唯一の方法は、 eval を使用することです。しかし、彼らが言うように、eval は悪ですが、制御された環境ではそうではありません。これは可能な方法ですが、どうしても必要な場合を除き、eval の使用はお勧めしません。

var myObject = new MyObject();
var myString = "myObject";
var wantThisToWork = eval(myString).myproperty;
于 2012-06-08T17:22:46.543 に答える
4

eval()を使用する

var myObject = {};
myObject.myproperty = "Hello";
var myString = "myObject";

var wantThisToWork = eval(myString).myproperty;
于 2012-06-08T17:30:16.563 に答える