1. 程式人生 > >javascript中apply,call,bind區別,bind兼容等問題總結

javascript中apply,call,bind區別,bind兼容等問題總結

scrip 總結 區別 call script 例子 獲取 log app

1 三者的相似之處:

(1).都是用來改變函數的this對象的指向的

(2).都是用第一個參數來做this對象的指向

(3).都可以傳參數進去

那麽,具體到它們有什麽區別呢?請看下面的例子:

技術分享

兩個對象,一個動物類,一個人類,人類也是可以走的,那麽我們可以讓人類直接使用動物類的action方法嗎?答案當然是可以的。

方法就是通過改變動物類的action方法的指向,讓它的指向變為person,如下:

技術分享

結果如下:

技術分享

再看另外兩種用法:

技術分享

這是call的方法,最後一個bind是有點特殊的:

技術分享

這是因為bind獲取到的還是這個方法,只不過已經把this的指向指到person上了,如果要運行,還需調用一下

以上就是這三者的用法,還有一個重要的區別就是當這個方法需要傳參數的時候,請看下面的例子:

技術分享

當我們需要有參數的時候,apply用法如下:

技術分享

而call的用法如下:

技術分享

也就是說apply需要把參數按照數組的方式傳進去,它會自動映射到方法的參數上,而call是直接按順序寫參數就可以了,最後看一下bind

技術分享

bind可以直接傳參數(跟call一樣),但是因為它本身獲取到的就是一個function,因此還可以按照給function傳參數的方式來傳參:

技術分享

到此,這三個方法的區別就基本說完了,希望可以對感興趣的人有幫助!

javascript中apply,call,bind區別,bind兼容等問題總結