web-dev-qa-db-ja.com

JavaScriptで動的オブジェクト名を作成できますか?

重複の可能性:
javascript-動的変数
動的Javascript変数名

ページ上にいくつかのオブジェクトを作成する必要があり、それらに順番に名前を付けたいと思います。 JavaScriptでこれを行う方法はありますか?

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

このようにして、(値「num」に応じて)さまざまな数のオブジェクトを動的に作成し、それらのプロパティを適切に設定できます。

これはPHPで実行できますが、JavaScriptで実行する方法はありますか?

12
Terry Carnes

これはお勧めしませんが、実行しようとしていることを実行します(ブラウザーで実行していて、他の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;

または、他の多くの回答が示唆するような配列を使用します。

12
Trevor Dixon

それが、何かのコレクションを保持するための配列の目的です。

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

ほとんどの場合、動的変数は悪い考えです。

6
Felix Kling

そのオブジェクトのプロパティを作成したり、設定/変更したりできます。

変更されたコード:

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;
    }
1
Anoop