2016-10-18 24 views
0

我有兩部分問題。將值嵌套在對象中並與變量值進行比較

1)我需要訪問一個嵌套在複雜對象中的唯一值列表。我能夠輸出的對象經由console.log這樣:

console.log(dataStore); 

此輸出下面的(部分):

`Object 
    getResponses: function getResponses(ids) 
     arguments: null
  
     caller: null
  
     length: 1
  
     name: "getResponses"
  
     prototype: Object
  
     __proto__: function()
   
     <function scope> 
      Closure 
       responseCache: Object 
        12345: gr.Response
  
        12346: gr.Response 
        etc... 
    getImg: function (imageId) 
    etc... ` 

我需要集responseCache下數字的值的列表的呼叫: 12345,12346,12347等。這些值的總量可能非常大。可能是10,可能是100的列表中。

2)我需要創建一個條件語句來比較不屬於上述對象的變量的值。例如:如果

variableX = variableXvalue; 

if ("variableXvalue" is one of the unique values in "responseCache") { 
//then do this 
} 

不知道它的問題在這裏的問題的目的,但variableX是一個循環,遍歷網頁上的屬性。它遍歷頁面上所有匹配的標記/屬性,並且每次循環時都需要將這些屬性值與完整的值列表responseCache進行比較。

謝謝你考慮這個問題。

+0

這只是你的開發工具對你很好。你不能訪問'responseCache'。它在封閉的內部。它實際上是一個私有變量。 –

回答

0

我們來看看如何編寫這種代碼的例子。

var obj = (function() { 
    var responseCache = { 
    12345: 12, 
    12348: 34, 
    12355: 56 
    }; 
    return { 
    getResponses: function getResponses(ids) { 
     return responseCache[id]; 
    } 
    }; 
})(); 
console.log(obj); 

如果您在控制檯中運行該代碼,您將能夠深入分析並看到與您所看到的基本相同的輸出。現在,你怎麼能直接訪問responseCache?你不能。它實際上是私密的,只能在該封閉內直接訪問。外部代碼無法直接訪問該變量。如果obj上的任何功能使用它,則只能間接訪問它。

+0

因此沒有辦法訪問這些值?即使掃描整個對象的任何與'variableX'匹配的數字字符串,除了將這些值作爲'responseCache'的一部分ID? – david

+0

@david你明白了。您所看到的只是您的開發環境提供的一些額外信息。您的代碼無法訪問該數據,除非該對象直接提供給您。 –

+0

那麼,我該如何讓對象直接給我?我可以訪問定義'responseCache'的腳本,但它的位置與JS語句不同,它有一種方法可以收集第一個JS文件中的數字字符串,並將它們傳遞給閉包之外的部分另一個JS文件? – david