2010-07-28 6 views
0

Je suis nouveau au modèle d'objet javascript (basé prototype) et essaie de faire ce qui suit:Objet Javascript/tableau question?

J'ai un constructeur qui initialise simplement un tableau: this.myArray = []. J'ai une méthode:

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

Fondamentalement, je besoin myArray être attaché à un type spécifique. C'est à dire. lorsque addToArray() est appelée, l'objet sera ajouté à un tableau associé au type. Je ne veux pas avoir à connaître tous les types possibles à l'avance. Je vais également devoir ajouter des méthodes qui effacent le tableau contenant des objets d'un certain type. Donc, fondamentalement, je pense que je dois créer des tableaux dynamiquement qui sont associés à un type.

Toute aide serait appréciée.

Je pense que ma question prête à confusion, alors je vais essayer d'élaborer: mon code "business" crée des objets dont j'ai besoin de garder une trace. Chaque objet est associé à un certain "type" ou "saveur". J'essaye de faire un objet générique qui manipule stockant ces références d'objet dans des tableaux (un tableau par type) et manipulant des opérations sur ces objets. Les opérations pourraient alors être effectuées sur tous les objets d'un type donné. Je veux être capable de le faire sans connaître les types à l'avance (c'est-à-dire éviter de créer 1 tableau par type dans le constructeur).

"Type" peut être n'importe quoi. c'est-à-dire une chaîne "typeA", ou "typeB" etc. juste un moyen de différencier entre différentes classes d'objets.

+0

Votre question est source de confusion. JavaScript est dynamiquement typé, donc il n'y a pas vraiment beaucoup de choses différentes que vous obtiendrez de ['typeof'] (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/typeof_Operator). Parlez-vous essentiellement de la création de tableaux homogènes, par ex. un tableau pour stocker les chaînes, un autre pour stocker les numéros, et ainsi de suite? –

+0

Vos objets métier ont-ils une propriété qui identifie leur "type"? – Ronald

Répondre

1

Vous pourriez faire quelque chose comme ceci:

var objects = {}; 
... 
if (objects[type]) { 
    objects[type].push(myObject); 
} else { 
    objects[type] = [myObject]; 
} 
//...similar methods to delete objects, etc. 
+0

qu'est-ce que la définition de la variable égale à {} faire? En quoi est-ce différent de le définir comme égal à []? merci – ewa

+0

{} est un objet vide. Je l'utilise un peu comme un tableau associatif: il a un tableau [] d'objets pour chaque type, comme objet [type] = [obj1, obj2, ...]. C'est aussi comme: object = {type1: [obj1, ...], type2: [truc, barre, ...]}. – jtbandes

+0

La partie {} que vous voulez laisser en dehors de votre fonction; le reste va à l'intérieur pour ajouter l'objet au tableau correspondant. Désolé je ne peux pas être plus utile, je tape ceci sur mon téléphone ... :) – jtbandes

1

Si j'ai correctement interprété votre question, il n'est pas possible de faire ce que vous voulez car les tableaux JavaScript ne sont pas tapés - Vous pouvez placer n'importe quel type d'objet dans n'importe quel tableau.

EDIT:

À la lumière de votre mise à jour, il semble que vous pourriez avoir un objet qui a des propriétés qui correspondent à vos noms de constructeur d'objet. Chaque propriété contient un tableau contenant des objets créés avec un constructeur qui correspond au nom de la propriété.

Par exemple,

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. 

Avec cette approche, vous devez être prudent et augmenter le nom du constructeur quand héritant des objets.