Могу ли я создавать динамические имена объектов в JavaScript?

Возможный дубликат:
javascript – динамические переменные
Имена динамических переменных Javascript

Мне нужно создать несколько объектов на странице и я хочу назвать их последовательно. Есть ли способ сделать это в JavaScript?

for (i=0;i<num;i++){
  var obj+i = new myObject("param1","param2");
  obj+i.someProperty = value;
}

Таким образом, я могу динамически создавать различное количество объектов (в зависимости от значения «num»), а затем соответствующим образом устанавливать их свойства.

Я могу сделать это на PHP, есть ли способ сделать это на JavaScript?


person Terry Carnes    schedule 10.10.2012    source источник
comment
Спасибо за помощь! Я сопротивлялся самой идее создания массива объектов, раньше этого не делал. Я задал вопрос, думая, что это поможет мне начать диалог, чтобы найти ответ. Получив снова ответ массива, я попробовал, и это сработало! Извините, что так медленно в это поверил.   -  person Terry Carnes    schedule 12.10.2012


Ответы (3)


Это не рекомендуется, но делает то, что вы пытаетесь сделать (если вы работаете в браузере, а не в какой-либо другой среде js).

for (i = 0; i < num; i++) {
  window['obj' + i] = new myObject("param1","param2");
  window['obj' + i].someProperty = value;
}
obj0.someProperty;

Это работает, потому что глобальные переменные на самом деле являются свойствами объекта окна (если вы работаете в браузере). Вы можете получить доступ к свойствам объекта, используя запись через точку (myObject.prop) или скобки (myObject['prop']). Назначая window['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;

Или используйте массив, как предлагают многие другие ответы.

person Trevor Dixon    schedule 10.10.2012
comment
я согласен, приведенный выше код работает. Но не делай этого! - person Webbies; 10.10.2012
comment
Думаю, важно отметить, что тогда эти переменные будут глобальными. - person Felix Kling; 10.10.2012

Вот для чего нужны массивы, чтобы хранить коллекцию чего-то:

var objs = [];
for (i=0;i<num;i++){
  objs[i] = new myObject("param1","param2");
  objs[i].someProperty = value;
}

Динамические переменные почти всегда плохая идея.

person Felix Kling    schedule 10.10.2012

Вы можете создавать и устанавливать/изменять свойства этого объекта.

Модифицированный код:

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;
    }
person Anoop    schedule 10.10.2012
comment
Я знаю, что это старо, но это не создает имя динамического объекта. - person Craicerjack; 21.01.2016