搞一搞 apply、call和 bind

? ? ?在剛開始寫代碼的時候,總是會遇到些call或者apply的代碼,面試的時候總是會遇到些call和apply的問題,這會呢我們扯一下call、apply和bind(bind一般會放到下一個階段問),省的我們到時候知道怎么用,怎么玩,但是吹不出來。

? ? ?其實簡單說呢,這三個玩意都是改變函數方法里的this的指向問題,一般來說呢this指向就是誰調用它它指向誰,而且指向它的上一級的最近的一個對象,但是構造函數呢里面的this就不聽話了,它指向于根據構造函數新建的對象(當然一般可以這么理解,具體了解的話可以查看js高程三里一章關于上下文的問題的內容)。當構造函數中return一個對象的時候,新建對象里this的指向就會發生改變,確定的說這個構造函數本身的就發生了改變,this指向返回的對象,但是返回的是簡單數據類型,那么this的指向就不變。

? ? call和apply的使用方法呢,大抵相同,都是fn.call(obj,arg1,arg2...)/fn.apply(obj,[...arguments]),其中呢obj就相當于fn指向的新的對象,也可以理解為fn直接成為obj的一個方法,帶的那些參數就用于方法的執行的參數,只不過是call之后參數是一個接一個,而apply之后是一個數組形式的。注意:如果obj是一個null的話,那么this就指向window。call和apply執行之后的方法都是立即執行。

? ? ? 接下來說一下bind,bind呢也可以用來改變this的指向,bind的操作方式和call差不多后面跟參數,但是bind返回的是一個函數,這個函數不會立即執行,只有在調用的時候執行,而且在調用的時候還可以再次放入參數,但是參數的執行只能按照形參一個一個來,至于call和apply搞出來的直接執行的函數只能在當時插入參數。

? ? ? ?接下來就是使用,關于這三個玩意的使用,全看你自己的業務或者奇思妙想,只要玩的開,啥都能搞。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容