имя экземпляра как переменная - PullRequest
2 голосов
/ 17 февраля 2011

Я искал этот сайт и также гуглил, но не могу найти ответ.

Мне нужно динамически создавать экземпляры объекта, где имя экземпляра предоставляется как переменная, вместо того, чтобы обращаться к свойствам объектаиспользуя:

var n = 'abcd';

eval('var '+n+' = new myinst();');

abcd.property = value;

Мне нужно получить доступ с помощью переменной:

['abcd'].property = value;

Но это не похоже на работу - что я пропускаю?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Вы можете создавать «переменные переменные», используя обозначение массива, но вам необходимо предоставить контекст для этого.В глобальной области видимости это будет window:

var foo = 'bar';
window[foo] = new myinst();
window[foo].property = 'baz';
alert(bar.property);

Заменить window на любую другую область видимости, в которой должна находиться переменная переменная. Переменные на самом деле являются антишаблоном, который не должениспользовал, хотя.

2 голосов
/ 17 февраля 2011

Вы не должны использовать eval таким образом.Вместо этого вы можете легко назначить «динамические» переменные некоторому базовому объекту:

var baseObj = {};
var n = 'abcd';

baseObj[n] = new myinst();
baseObj[n].property = value;

Это дает вам полный контроль над переменной, включая возможность delete it,

delete baseObj[n];

Или проверьте, существует ли он,

n in baseObj;
0 голосов
/ 17 февраля 2011

Если это глобальный, вы можете использовать:

var n = 'abcd';
window[ n ] = new myInst();
window[ n ].property = value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...