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