Подтвердить что ты не робот

Javascript: интерпретировать строку как ссылку на объект?

Возможный дубликат:
Использовать переменную Javascript как имя объекта

Как мне заставить JS обрабатывать строку как ссылку на ранее определенный объект? Упрощенная:

var myObject = new MyObject();

var myString = "myObject";

var wantThisToWork = myString.myproperty;
4b9b3361

Ответ 1

Если переменная находится в глобальной области видимости, вы можете получить к ней доступ как свойство глобального объекта

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
}

Ответ 2

Вы можете использовать функцию eval.

eval(myString).myproperty

Осторожно с eval, хотя, если это то, что вводит пользователь, он выполнит любой код javascript!

Ответ 3

Единственный способ, как мне кажется, - использовать eval. Но, как говорится, eval - зло, но не в контролируемой среде. Это возможно, но я не рекомендую использовать eval, если это абсолютно необходимо.

var myObject = new MyObject();
var myString = "myObject";
var wantThisToWork = eval(myString).myproperty;

Ответ 4

Используйте eval()

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

var wantThisToWork = eval(myString).myproperty;