我是javascript对象模型(基于原型)的新手,我正在尝试执行以下操作:
我有一个只是初始化数组的构造函数:this.myArray = []
。我有一个方法:
MyConstructor.prototype.addToArray = function(myObject, type) {
//
};
基本上我需要将myArray
附加到特定的type
。即调用addToArray()
时,对象将添加到与type
关联的数组中。我不想提前知道所有可能的类型。我还需要添加清除包含特定类型对象的数组的方法。基本上,我认为我需要以某种方式动态创建与类型相关联的数组。
任何帮助都将不胜感激。
我认为我的问题令人困惑所以我会试着详细说明:我的“业务”代码会创建我需要跟踪的对象。每个对象与某种“类型”或“味道”相关联。我正在尝试创建一个通用对象,它处理在数组中存储这些对象引用(每种类型的数组)并处理对这些对象的操作。然后可以对给定类型的所有对象执行操作。我希望能够在不事先知道类型的情况下做到这一点(即避免在构造函数中为每个类型创建1个数组)。
“类型”可以是任何东西。即字符串“typeA”或“typeB”等只是在不同类别的对象之间进行区分的方式。
答案 0 :(得分: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.
使用这种方法,在继承对象时,您需要小心并扩充构造函数名称。
答案 1 :(得分:1)
您可能会这样做:
var objects = {};
...
if (objects[type]) {
objects[type].push(myObject);
} else {
objects[type] = [myObject];
}
//...similar methods to delete objects, etc.