1

これが私が達成しようとしていることです。オブジェクトを動的に作成しており、それらを「マスター コンテナ」オブジェクトに追加したいと考えています。現在、コンテナーに配列を使用していますが、インデックスではなく名前でこれらのオブジェクトにアクセスしたい場合があります。そのような:

function Scene() {
     this.properties;
}

Scene.prototype.addEntity = function(entity) {
    this.push(entity);
}


var coolNameForObject = { Params };
var Scene1 = new Scene();

Scene1.addEntity(coolNameForObject);

.push が利用できないことは知っていますが、配列に対してのみ使用できますが、一日中インデックスを使用するのにうんざりしています。各エンティティをその名前で参照したいと思います。例えば:

Scene1.coolNameForObject.property

でも、いい方法が思い浮かびません。

多分次のようなものがあります:

coolNameForObject.name = 'coolNameForObject';
Scene1.(coolNameForObject.name) = coolNameForObject;

しかし、Dreamweaver ではその構文がうまく機能しません。私はグーグルで検索しましたが、出てくるものはすべて配列を介してより簡単に解決できます。これらのオブジェクトが必要なものに確信があり、コンテナオブジェクトのプロパティ参照を介してオブジェクトを呼び出すことができる方法ですトーゴ。

「addEntity()」を完全にスキップして、そのまま進むことができます

Scene1.coolNameForObject = coolNameForObject;

しかし、それはカプセル化の考え方に反するようです。

ありがとうございました。

4

2 に答える 2

1

Javascriptオブジェクトのプロパティは動的に追加でき、直接または変数から角括弧構文で名前を付けることができます。

var propName = "foo";
coolNameForObject[propName] = 'coolNameForObject';

coolNameForObject["bar"] = 'coolNameForObject';

Scene.prototype.addEntity = function(name, entity) {
    this[name] = entity;
}
于 2013-03-15T04:21:55.830 に答える
0

このようなプロパティを追加して列挙可能にします: true,これは問題を引き起こしません. キーに簡単にアクセスできます。

 Object.defineProperty(obj, "key", {
  enumerable: true,
  configurable: true,
  writable: true,
 });
于 2013-03-15T04:27:38.417 に答える