2010-07-28 143 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. 

通過這種方法,你需要小心和對象繼承時增加構造函數的名稱。