Могу ли я создавать динамические имена объектов в 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;
    }