2011-07-03 24 views
0
var hash = {  
    func1: function(){ 

    }, 
    return {   
     contains: function(key) { 
     return keys[key] === true;   
    }, 
     add: function(key) { 
      if (keys[key] !== true){ 
      keys[key] = true;    
     } 
    }  
} 

任何人都可以解釋我的回報是如何在這裏工作的正確途徑... 我可以打電話hash.contains(key) 我覺得我自己編寫的代碼是錯誤的...意味着結構?誰能告訴形成該代碼,並使用它

+0

以上是不合法的Javascript,所以我猜測,在試圖混淆原始源代碼時,你會篡改實際發生的事情。你有什麼是一個對象有一個功能,反過來,返回另一個對象。但是你將不得不給我們真正的源代碼。 –

+0

@Conspicous編譯器:真正的代碼是不同的,我以這種方式打開它...只是讓我知道結構我怎麼能形成...我可以使用這樣的返回或應該在函數內部.. –

+1

如果它實際上只是一個包含方法「添加」和「包含」的哈希對象,然後它只是做一個內置javascript對象已經做的事情。 – jfriend00

回答

2
var hash = (function() { 
    var keys = {}; 
    return { 
     contains: function (key) { 
      return keys[key] === true; 
     }, 
     add: function (key) { 
      if (keys[key] !== true) { 
       keys[key] = true; 
      } 
     } 
    } 
})(); 

這就是我想你想要的目的。從你的代碼中,我認爲你正在嘗試創建一個帶有add和contains方法的散列對象,用於檢查key是否存在於你的關鍵字var中,同時也使它成爲一個受保護的變量。

上面的代碼所做的是創建一個包含keys變量(一個對象)的閉包,並使用兩個方法contains和add返回一個對象。

你可以在這裏閱讀更多關於關閉http://jibbering.com/faq/notes/closures/。閉包是Javascript最靈活的原因之一。

2

我不確定爲什麼你需要這樣一個哈希對象,因爲Javascript語言已經內置了哈希對象,它們會更快。你可以用普通的JavaScript做到這一點:

var team = {}; 
team.sport = "baseball"; 
team.city = "San Francisco"; 
team.name = "San Francisco Giants"; 
team.lastChampionship = 2010; 
team.currentStanding = 1; 

if (team.sport) {         // contains test 
    alert("This team plays " + team.sport); 
} 

或本:

var playerNames = {}; 
playerNames["Zito"] = "pitcher"; 
playerNames["Lincecum"] = "pitcher"; 
playerNames["Cain"] = "pitcher"; 
playerNames["Sandoval"] = "infielder"; 
playerNames["Posey"] = "catcher"; 

if (playerNames["Posey"]) {       // contains test 
    alert("Posey is a " + playerNames["Posey"]); 
} else { 
    alert("No player by the name of Posey"); 
} 
相關問題