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 回答