Javascript объект / массив вопрос? - PullRequest
0 голосов
/ 28 июля 2010

Я новичок в объектной модели javascript (на основе прототипа) и пытаюсь сделать следующее:

У меня есть конструктор, который просто инициализирует массив: this.myArray = [].У меня есть метод:

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

В основном мне нужно myArray, чтобы присоединиться к конкретному type.Т.е. когда вызывается addToArray(), объект будет добавлен в массив, связанный с type.Я не хочу знать все возможные типы заранее.Мне также нужно будет добавить методы, которые очищают массив, содержащий объекты определенного типа.В общем, я думаю, что мне нужно каким-то образом динамически создавать массивы, связанные с типом.

Любая помощь будет принята с благодарностью.

Я думаю, что мой вопрос сбивает с толку, поэтому я попытаюсь уточнить: мой «бизнес» код создает объекты, которые мне нужно отслеживать.Каждый объект связан с определенным «типом» или «ароматом».Я пытаюсь сделать универсальный объект, который обрабатывает хранение этих ссылок на объекты в массивах (массив для каждого типа) и обработки операций с этими объектами.Операции затем могут быть выполнены на всех объектах данного типа.Я хочу быть в состоянии сделать это, не зная заранее типов (т.е. избегать создания 1 массива для каждого типа в конструкторе).

"Тип" может быть любым.то есть строка "typeA" или "typeB" и т. д., просто способ различения между различными классами объектов.

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Вы можете сделать что-то вроде этого:

var objects = {};
...
if (objects[type]) {
    objects[type].push(myObject);
} else {
    objects[type] = [myObject];
}
//...similar methods to delete objects, etc.
1 голос
/ 28 июля 2010

Если я правильно истолковал ваш вопрос, невозможно сделать то, что вы хотите, так как массивы JavaScript не набраны - вы можете поместить любой тип объекта в любой массив.

EDIT:

В свете вашего обновления кажется, что у вас может быть объект, свойства которого соответствуют именам вашего конструктора объектов. Каждое свойство содержит массив, содержащий объекты, созданные с помощью конструктора, который соответствует имени свойства.

Например,

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.

При таком подходе вам нужно быть осторожным и расширять имя конструктора при наследовании от объектов.

...