2012-02-03 93 views
0

我基本上試圖在JavaScript中創建一個通用對象,我可以使用它來充當聯合數組。
但我想給這個對象一些自定義成員能夠對給定對象進行操作。針頭說我失敗了,希望有人能指引我走向正確的方向。在javascript中使用私有成員函數的對象操作

這是我談論的通用對象。

function easeArray() { 
    this.valIndex = function(searchTerm,object) { 
     //searchTerm+object; 
     if (searchTerm in object) { 
      return "true" + object[searchTerm] 
     } 
    } 
} 

那麼我試着像這樣初始化它。

 var myCollection = new easeArray(); 
    myCollection = {"dioxanes": 0, "shunning": 1, "plowed": 2, 
     "hoodlumism": 3, "cull": 4,  "learnings": 5, 
     "transmutes": 6, "cornels": 7, "undergrowths": 8, 
     "hobble": 9,  "peplumed": 10, "fluffily": 11, 
     "leadoff": 12, "dilemmas": 13, "firers": 14, 
     "farmworks": 15, "anterior": 16, "flagpole": 17}; 

這工作得很好,但是當我嘗試做這樣的事情:

alert(myCollection.valIndex()) 

我得到一個錯誤。 類型錯誤:對象不支持屬性或方法。

沒關係,我沒有將值傳遞給函數我明白,函數甚至不承認。

我的最終結果是有一個通用的對象,我可以初始化和鍵值對填滿,然後簡單地說object.valindex("searchTerm");

任何幫助將不勝感激。

+2

您的重新分配所述MyCollection的變量爲不同的值 - 使用方法/構造將值傳遞 – ManseUK 2012-02-03 12:05:38

+0

「填充」該對象的數據將沒問題,但正如ManseUK所說,你不會向myCollection添加任何東西,你會用新的值重寫它。如果我有一個數組'a = [1,2]',那麼'a = 3'不會給數組添加'3',它只是將'a'設置爲指向'3'而不是數組。這是基本的變量分配。我也不明白這與「私人成員」有什麼關係(反正JS中不存在)。 – 2012-02-03 12:09:56

回答

1

這不可能,因爲在最新的聲明中工作,你摧毀你easeArray對象的實例。因此,陣列還沒有這樣的方法定義

嘗試此代碼,而不是

var easeArray = function(obj) { 
    this.obj = obj 
    this.valIndex = function(searchTerm) { 
     if (searchTerm in this.obj) { 
      return "true" + this.obj[searchTerm]; 
     } 
    } 
} 

var myCollection = new easeArray({ 
     "dioxanes": 0, "shunning": 1, "plowed": 2, 
     "hoodlumism": 3, "cull": 4,  "learnings": 5, 
     "transmutes": 6, "cornels": 7, "undergrowths": 8, 
     "hobble": 9,  "peplumed": 10, "fluffily": 11, 
     "leadoff": 12, "dilemmas": 13, "firers": 14, 
     "farmworks": 15, "anterior": 16, "flagpole": 17 
    }); 

    myCollection.valIndex("firers"); /* this returns "true14" */ 
+0

非常感謝您的解釋我是一個恢復動作成癮者,它開始顯示。我沒有意識到我基本上壓倒了價值。我試圖做一個變量,以鍵入easeArray,我顯然設法搞砸在更多的方式。 – user677275 2012-02-03 13:55:05

1

在這行代碼:

 var myCollection = new easeArray(); 

您設置變量「MyCollection的」對你構建一個新的對象的引用。然後,在下一行:

 myCollection = {"dioxanes": 0, "shunning": 1, "plowed": 2, ... 

你相同的變量設置爲一個不同對象的引用。你在第一個陳述中建立的那個在那時已經消失了。

您需要做的是將一些方法添加到「easeArray」類中,以便根據需要將值存儲到其中。鑑於你發佈的例子,我不知道你爲什麼需要這個「valIndex」函數。如果你簡單地引用這些字符串之一:

 var index = myCollection["dioxanes"]; 

你會看到「指數」爲0

相關問題