2015-10-14 61 views
1

同時通過annotated Backbone source code讀書,我遇到了這樣一個任務:骨幹源中的多個左側分配 - 它是一種微型優化嗎?

var Events = Backbone.Events = {}; 

我明白髮生了什麼:一個空的對象被分配到Backbone.Events,然後將其分配給Events

作業的寫法是什麼原因?

總的來說,我知道,多左手分配是一個糟糕的主意,因爲如果這樣做是這樣的:

var a = b = c = 1; 

bc被提升到全局命名空間,但在骨幹網的情況下,Events是局部變量和Backbone.Events被綁定到Backbone對象,所以這裏沒有範圍污染 - 這是正確的嗎?

那麼它是這樣寫的,因此在Events中獲得Backbone.Events的「副本」,因爲對象總是通過JavaScript中的引用傳遞的?這意味着對Events的更改也適用於Backbone.Events,因爲它實際上是同一個對象,但我在此看不到任何優勢,但也許我錯過了某些內容?也許這只是一個很簡單的方法呢?

var Events = {}; 
var Backbone.Events = {}; 

編輯:上面的例子其實是錯誤的,我剛剛意識到這是因爲Guffa的回答。

+0

「...因爲對象總是通過JavaScript引用傳遞的。」。是。作者還定義了一個'Events'對象,以便源代碼變得更清晰。 – undefined

+0

@Vohuman用更乾淨的你意味着你只需鍵入'Events'而不是'Backbone.Events'? – Sven

+0

是的。是好還是壞?答案是「主要基於意見」。 – undefined

回答

1

因此,它是這樣寫的,所以獲取Backbone.Events在事件中的'複製',因爲對象總是通過引用在JavaScript中傳遞?

這正是它是什麼。這僅僅意味着,通過在骨幹處發生事件,您可以將其稱爲全局變量。例如,如果你這樣做:

Backbone.Events.testEvent = "just a quick proof of concept test"; 

你可以看到,這同樣存在於Events變量,並通過反之亦然。

更新應答

從文檔骨幹實際上是使用這種變量的快速參考從骨幹事件或其他資源。

但是我認爲將multiple assignments合併爲一行是一種不好的做法。

+1

「最好不要將全局變量用於」快速「訪問」。代碼在這裏沒有定義_global_變量。 – undefined

+0

你是對的!更新我的答案 – mikelamar

1

是的,Events變量將指向與Backbone.Events屬性相同的對象。它的簡寫形式如下:

Backbone.Events = {}; 
var Events = Backbone.Events;