2012-06-12 65 views
0

這是一個簡單的問題,我只想深入一點:每個對象的addEventHandler VS事件中的對象通過對象循環

我有1000個JavaScript對象。

情況1:這些對象中的每一個都向按鈕添加事件偵聽器,因此瀏覽器會遍歷所有這些函數並調用處理腳本。

情況2:某些對象將一個事件偵聽器添加到按鈕中,並通過循環遍歷所有對象並對每個對象調用處理腳本來作出反應。

我根本無法推斷哪個更快,而且我也知道可能有更多的方法比這更多,所以,見解?

+0

調查**事件冒泡的主題** – Pointy

+1

@Pointy事件冒泡在這裏沒有幫助。他只是詢問將多個事件附加到單個按鈕與一個事件之間的區別。 –

+0

啊我明白了。那麼我看到了「1000」,並且我沒有想到會有1000個不同的事情需要點擊**一個**按鈕。 – Pointy

回答

0

我相信這個差別可以忽略不計,如果你真的好奇你可以通過jsPerf來運行每個場景來找出答案。

在這種情況下,我沒有看到任何理由不採取更可維護的解決方案,並且將一個事件處理程序連接到內部循環的按鈕將在未來更容易調試。

+0

我也認爲開發和調試會更容易......但後來我意識到它非常不靈活。要使它爲1000個對象中的每一個工作,需要將事件代理給每個對象。這意味着1000個不同的函數,但它本來就是循環的,節省了速度......然後在JavaScript中循環,讓我調用對象的方法更簡單任何代理和全部來自同一個原型......這是非常直觀的,事件處理的方式,它需要一個上下文參數來實際使用。 – DanRedux

+0

有趣的是,我對它的考慮越多,我認爲這兩種情況都不適合調試。有一件事我沒有想過,對於每個事件,瀏覽器必須創建一個事件對象以傳遞給附加的處理程序。在1000個事件的過程中,在速度和內存使用方面可能會有一些成本。使用一個事件處理程序不會增加開銷。 –