Javascript 请帮我找到bug

Javascript 请帮我找到bug,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,对这两幅图像的解释 代码 既然大家都把你揍了,我会很好地告诉你你做错了什么 您有一个简单的引用问题。首先将user\u数据对象传递给函数。然后,再参考此处的user\u data点: window.user_profile = user_data 现在,您的数据如下所示: window.user_profile ->-+ | +->- {playlists: [ ], ...}

对这两幅图像的解释

代码
既然大家都把你揍了,我会很好地告诉你你做错了什么

您有一个简单的引用问题。首先将
user\u数据
对象传递给函数。然后,再参考此处的
user\u data
点:

window.user_profile = user_data
现在,您的数据如下所示:

window.user_profile ->-+
                       |
                       +->- {playlists: [ ], ...}
                       |
user_data ----------->-+
然后,在此处再次引用
用户数据。播放列表

playlists_both_people = user_profile['playlists']
现在你手上拿着这个:

window.user_profile ->-+
                       |
                       +->- {playlists: [ ], ...}
                       |      ^
user_data ----------->-+      |
                              |
playlists_both_people --->----+
然后你把一堆东西推到播放列表上,你和人们都想知道为什么它改变了用户数据。播放列表也改变了。这个图表告诉你为什么:你从来没有复制过任何东西,你只是通过多个变量引用同一段数据

您使用的是主干,因此您有下划线,也许可以帮助您:

playlists_both_people = _(user_profile['playlists']).clone()
这将为您提供一份
用户档案的(浅)副本。播放列表
(与
用户数据相同。此时播放列表
)在
播放列表中,两个人
和下一个
forEach
都不会更改
用户数据
中的任何内容

请注意,
window.user\u profile
可能仍然存在双重引用问题。您不能只使用一个
.clone
来解决这个可能的问题,但是,您必须单独克隆每个成员,因为
.clone
只进行浅拷贝。但是,您可能有jQuery,并且支持深度复制,所以这可能是一个选项

我还建议不要把东西直接放在
窗口中。您最好为应用程序设置一个名称空间,比如说
window.app
,然后使用该名称空间:

window.app.user_profile = ...

你已经了解这个网站一年多了,但你问了这样一个问题,永远也找不到答案。
window.app.user_profile = ...