0

私はjavascriptオブジェクトモデル(プロトタイプベース)に不慣れで、次のことをしようとしています:

単純に配列を初期化するコンストラクタがあります: this.myArray = []. 私は方法を持っています:

MyConstructor.prototype.addToArray = function(myObject, type) {
   //
};

基本的に、私myArrayは特定の に添付する必要がありますtype。つまり、addToArray()が呼び出されると、オブジェクトは に関連付けられた配列に追加されますtype。可能なすべての型を前もって知る必要はありません。また、特定の型のオブジェクトを保持している配列をクリアするメソッドを追加する必要があります。基本的に、型に関連付けられた配列を動的に作成する必要があると思います。

どんな助けでも大歓迎です。

私の質問は紛らわしいと思うので、詳しく説明します。私の「ビジネス」コードは、追跡する必要があるオブジェクトを作成します。各オブジェクトは、特定の「タイプ」または「フレーバー」に関連付けられています。これらのオブジェクト参照を配列 (型ごとの配列) に格納し、これらのオブジェクトの操作を処理する汎用オブジェクトを作成しようとしています。その後、特定のタイプのすべてのオブジェクトに対して操作を実行できます。事前に型を知らなくてもこれを実行できるようにしたい (つまり、コンストラクターで型ごとに 1 つの配列を作成しないようにする)。

「種類」はなんでもいいです。つまり、文字列「typeA」または「typeB」など。オブジェクトの異なるクラスを区別する方法にすぎません。

4

2 に答える 2

1

あなたの質問を正しく解釈した場合、JavaScript 配列は型指定されていないため、あなたが望むことを行うことはできません。任意の配列に任意のタイプのオブジェクトを配置できます。

編集:

あなたの更新に照らして、オブジェクトコンストラクター名と一致するプロパティを持つオブジェクトを持つことができるように思えます。各プロパティには、プロパティ名に一致するコンストラクタで作成されたオブジェクトを保持する配列が含まれています。

例えば、

function Cache() {}

Cache.prototype.add = function (obj) {
this[obj.constructor.name] === undefined? this[obj.constructor.name] = [obj] :
this[obj.constructor.name].push(obj);
}

function Constructor1(name, age) {
    this.name = name;
    this.age = age;
}

var cache = new Cache;
var con1 = new Constructor1('me', 10);
cache.add(con1);

console.log(cache) // has property 'Constructor1' containing an array with reference
                   // to object con1 in.

このアプローチでは、オブジェクトから継承するときに注意してコンストラクター名を拡張する必要があります。

于 2010-07-28T14:54:24.933 に答える
1

あなたは次のようなことをするかもしれません:

var objects = {};
...
if (objects[type]) {
    objects[type].push(myObject);
} else {
    objects[type] = [myObject];
}
//...similar methods to delete objects, etc.
于 2010-07-28T15:00:36.340 に答える