2016-02-19 172 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论坛;) –