Javascript中apply、call、bind的使用和區別

1、call 方法html

調用一個對象的一個方法,以另外一個對象替換當前對象(其實就是更改對象的內部指針,即改變對象的this指向的內容)。數組

 

語法app

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])dom

 

參數說明函數

thisObj :可選項。將被用做當前對象的對象。
arg1, arg2,   , argN :可選項。將被傳遞方法參數序列。this

 

備註spa

call 方法能夠用來代替另外一個對象調用一個方法。prototype

call 方法可將一個函數的對象上下文從初始的上下文改變爲由 thisObj 指定的新對象。若是沒有提供 thisObj 參數,那麼 Global 對象被用做 thisObj。指針

 


2、apply、call 的區別orm


一、對於第一個參數意義都同樣,但對第二個參數:apply傳入的是一個參數數組,也就是將多個參數組合成爲一個數組傳入,而call則做爲call的參數傳入(從第二個參數開始)。

func.call(func1,var1,var2,var3) 對應的apply寫法爲:func.apply(func1,[var1,var2,var3])


二、當你的參數是明確知道數量時用 call ,而不肯定的時候用 apply,而後把參數 push 進數組傳遞進去。

三、Javascript中存在一種名爲僞數組的對象結構。比較特別的是 arguments 對象,還有像調用 getElementsByTagName , document.childNodes 之類的,它們返回NodeList對象都屬於僞數組。不能應用 Array下的 push , pop 等方法。


可是咱們能經過 Array.prototype.slice.call 轉換爲真正的數組的帶有 length 屬性的對象,這樣 domNodes 就能夠應用 Array 下的全部方法了。



3、apply、call、bind比較

 

一、三者都是用來改變函數的this對象的指向的;

二、三者第一個參數都是this要指向的對象,也就是想指定的上下文;

三、三者均可以利用後續參數傳參;

四、bind 是返回對應函數,便於稍後調用;apply 、call 則是當即調用 。

五、當但願改變上下文環境以後並不是當即執行,而是回調執行的時候,使用 bind() 方法。而 apply/call 則會當即執行函數。



參考資料:Javascript中apply、call、bind的使用和區別   http://www.studyofnet.com/news/1124.html

相關文章
相關標籤/搜索