我正在迭代一些 api 数据并将 API 的数据映射到 Coffeescript 对象。令我困惑的是为什么只有部分数据在这两个 console.log 语句之间消失了:
items = (for item in @apiFeedPage.items
fi = new API.FeedItem(item, @apiFeedPage.instance_url)
console.log fi.comments.comments
window.API.itemHash[fi.id] = fi #save for later usage
fi )
console.log items[0].comments.comments
在上面,第一个 console.log 输出了我期望的评论: fi.comments.comments 等于一个 Comment 对象数组(Comments 是 FeedItem 上的一个属性) 在第二个 console.log 语句中,comments 对象在那里但未分配 - 就好像 Comment 构造函数在没有注释的 API 响应上运行一样。
构造函数如下所示:
class API.FeedItem extends API.FeedComponent
# instance vars
comments: {}
constructor: (data, instance_url) ->
super(data, instance_url)
@parent = new API.User( data.parent )
@comments.comments = (new API.Comment(api_comment) for api_comment in data.comments.comments)
@comments.total = data.comments.total
@comments.nextPageUrl = data.comments.nextPageUrl
而且我已经确认在构造函数内部,@comments.comments 已正确分配,这是您所期望的,因为第一个 console.log 语句具有预期的对象。上面的第一个代码块位于使用粗箭头的 Ajax 回调函数中,所以我最初怀疑这与丢失“this”的上下文有关似乎并不适用,因为 FeedItem 中的所有其他预期数据有没有...
关于为什么 items[0].comments.comments 在第二个语句中等于 [] 的任何想法?