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 = ...