2016-02-19 173 views
1

有時JavaScript與我一起玩(雖然交易是我會玩它)下面的這個測試代碼保持抵抗,所以我正在尋找一些幫助更聰明的人在這裏。試圖獲取對象屬性中的對象的屬性

回答recent question我試着創建一個可讀的列表,其中包含Google Advanced Calendar API中可用的所有顏色ID。

該請求是很簡單的:Calendar.Colors.get()

的響應是與幾個屬性,每一個是與其他特性的其他對象的對象。

我可以去到第二級,但最後 - 和在這種情況下,最有用的 - 級返回一個令人不安的「不確定」(見下面的部分日誌)

這就是我的問題...

代碼註釋:

function getColorList(){ 
    var colors = Calendar.Colors.get(); 
    //Logger.log(JSON.stringify(colors)); 
    for(var cat in colors){ 
    Logger.log("category "+cat+" = "+JSON.stringify(colors[cat])+'\n\n') 
    } 
    // from there I try the "event" category 
    var events = colors["event"]; 
    Logger.log('object colors["event"] = '+ JSON.stringify(events)) 
    // then I try to get every properties in this object 
    for(var val in events){ 
    Logger.log("key "+val+" = "+JSON.stringify(events[val])) 
    } 
} 

enter image description here

完整的日誌我小號viewable here(外在保持這一相當短)

+1

與11和性能調試窗口,我可以看到一個'events'對象,(下面的顏色對象),但是當值被記錄,它們都是未定義的。所以,我想你是問爲什麼他們出現在調試窗口中,但不能用代碼訪問?我不知道。我只能假設「他們」不希望任何人能夠訪問這些屬性。也許這是一個安全的事情?我不知道。有一個'Events'對象:'var events = Calendar.Events.get(calendarId,eventId)' –

回答

2

樣子()可表示只讀定義桑迪躲避到。 只是讓你自己的對象從colors循環將其轉換爲字符串後通過:

var json = JSON.stringify(colors["event"]); 
var myObj = JSON.parse(json); 

for(var val in myObj){ 
    Logger.log("key "+ val +" = "+JSON.stringify(myObj[val])) 
} 
+0

這個效果很好,但是你有一個想法,爲什麼我們必須重建objet讓它恢復它的對象性質? –

+0

不是肯定的,我會試圖找出什麼(關鍵)實際上是在文檔 - 一個數字,字符串,對象或顏色定義的類型? 'writable:false'也可以在對象屬性上設置,但不要認爲會阻止讀取它。也許使用javascript和谷歌日曆標記問題以獲得更多可見性 –

+0

感謝您提供這些有趣的評論,API文檔似乎確認它是一個對象,因爲使用參數創建事件需要將對象作爲參數...我會按照您的建議和查詢JavaScript論壇;) –