Могу ли я создавать динамические имена объектов в JavaScript?
Возможный дубликат:
javascript - динамические переменные
Динамические имена переменных Javascript
Мне нужно создать несколько объектов на странице и называть их последовательно. Есть ли способ сделать это в JavaScript?
for (i=0;i<num;i++){
var obj+i = new myObject("param1","param2");
obj+i.someProperty = value;
}
Таким образом, я могу динамически создавать различное количество объектов (в зависимости от значения "num" ), а затем соответствующим образом устанавливать их свойства.
Я могу сделать это в PHP, есть ли способ сделать это в JavaScript?
Ответы
Ответ 1
Это не рекомендуется, но делает то, что вы пытаетесь сделать (если вы работаете в браузере, а не в какой-либо другой среде js).
for (i = 0; i < num; i++) {
window['obj' + i] = new myObject("param1","param2");
window['obj' + i].someProperty = value;
}
obj0.someProperty;
Это работает, потому что глобальные переменные являются фактически свойствами объекта window (если вы работаете в браузере). Вы можете получить доступ к свойствам объекта, используя либо точечную нотацию (myObject.prop), либо скобку (myObject ['prop']). Назначив окно ['obj' + i], вы создаете глобальную переменную с именем 'obj' + i.
Лучший вариант - использовать массив или родительский объект для хранения ваших объектов.
myObjs = {};
for (i = 0; i < num; i++) {
myObjs['obj' + i] = new myObject("param1","param2");
myObjs['obj' + i].someProperty = value;
}
myObjs.obj0.someProperty;
Или используйте массив, как и многие другие рекомендации.
Ответ 2
Для чего нужны массивы, чтобы держать коллекцию чего-то:
var objs = [];
for (i=0;i<num;i++){
objs[i] = new myObject("param1","param2");
objs[i].someProperty = value;
}
Динамические переменные почти всегда являются плохими идеями.
Ответ 3
Вы можете создать, и вы можете установить/изменить свойства этого объекта.
Измененный код:
var obj = {}; //
for (i=0;i<num;i++){
obj[i] = new myObject("param1","param2");
obj[i].someProperty = value;
}
Я рекомендую вам использовать массив. а
var obj = []; //
for (i=0;i<num;i++){
obj[i] = new myObject("param1","param2");
obj[i].someProperty = value;
}