2010-07-28 99 views
0

我是新来的JavaScript对象模型(基于原型),并试图做到以下几点:Javascript对象/数组问题?

我有一个简单的初始化数组的构造函数:this.myArray = []。我有一个方法:

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

基本上我需要myArray附接至一个特定的type。即当调用addToArray()时,该对象将被添加到与type相关联的数组中。我不想提前知道所有可能的类型。我还需要添加清除保存某种类型对象的数组的方法。所以基本上,我想我需要以某种方式动态创建与某个类型关联的数组。

任何帮助,将不胜感激。

我觉得我的问题很混乱,所以我会试着详细说明一下:我的“业务”代码创建了需要跟踪的对象。每个对象都与某种“类型”或“风味”相关联。我正在试图创建一个通用对象来处理在数组中存储这些对象引用(每个类型的数组)以及处理这些对象的操作。然后可以对给定类型的所有对象执行操作。我希望能够在事先不知道类型的情况下做到这一点(即避免在构造函数中为每个类型创建1个数组)。

“类型”可以是任何东西。即字符串“typeA”或“typeB”等,只是在不同类别的对象之间进行区分的一种方式。

+0

你的问题是混乱的。 JavaScript是动态类型化的,所以实际上你没有从['typeof'](https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/typeof_Operator)获得许多不同的东西。你基本上是在谈论创建同质阵列,例如一个数组存储字符串,另一个存储数字,等等? – 2010-07-28 14:54:53

+0

您的业务对象是否拥有可识别其“类型”的属性? – Ronald 2010-07-28 14:56:00

回答

1

你可能会做这样的事情:

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

设置变量等于{}是做什么的?这与将它设置为等于[]是什么不同?谢谢 – ewa 2010-07-28 15:05:02

+0

{}是一个空对象。我使用它就像一个关联数组:它有一个数组[],每个类型的对象作为object [type] = [obj1,obj2,...]。这也是:object = {type1:[obj1,...],type2:[foo,bar,...]}。 – jtbandes 2010-07-28 15:09:01

+0

您想离开您的功能的{}部分;剩下的就是将对象添加到相应的数组中。对不起,我不能更有帮助,我在我的手机上打字... :) – jtbandes 2010-07-28 15:10:09

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. 

通过这种方法,你需要小心和对象继承时增加构造函数的名称。