2012-06-01 40 views
4

我正在尋找jQuery source code,然後我看到他們使用foo.call(context)而不是context.foo()
的示例 - 假設this是數組他們使用:的javascript foo.call(object)vs. object.foo()

return slice.call(this); 

代替:

return this.slice(); 

有什麼區別,是它喜歡的方式(在性能方面)做這些電話?

+0

我懷疑的性能有什麼。但我可能是錯的。 – Alexander

+0

我相信這與你可以像傳遞一個對象這樣的函數有關,因此它可能有不同的名字。所以上下文可能沒有這個名字的功能。 –

回答

6

問題是「foo」實際上可能不是「context」的屬性。在這種情況下,唯一真正的選擇是使用.call()(或.apply(),如適用)。

如果你確實有一個帶有「foo」屬性的對象,那是一個函數,那麼沒有真正的理由使用.call()

+0

我經常爲「稍後」的簡單情況做到這一點。你永遠不知道,你可能會稍後使用'call' ...它已經在那裏。否則,在性能方面沒有區別。 –