做用: 是調用函數,專門用於修改方法內部的 this 指向,指定this能夠表明誰
例如 fn.call(obj)意思就是 調用函數fn,而且this指向obj對象
數組
call的使用語法: 函數名字.call(對象,參數1,參數2,...); 實例: function test(a,b){ console.log(this); console.log(a + b); } test(1,2); // window 3 var obj = {name:'zjy'}; window.test.call(obj,3,5); // {name:'zjy'} 8
解析:沒有使用 call 方法時,test方法的this指向全局對象window,而當使用了call方法後,將test的this指向從window變成了obj對象,然後面的參數則是對應方法的形參順序app
做用: 和call方法同樣也是修改方法內部的 this指向的,它們的區別在於apply的第二個參數必須爲一個數組(部署了Iterator接口的類數組對象也能夠)函數
// ?apply的使用語法 // 函數名字.apply(對象,[參數1,參數2,...]); 實例: function test(a,b){ console.log(this); console.log(a + b); } test(1,2); // window 3 var obj = {name:'zjy'}; window.test.apply(obj,[3,5]); // {name:'zjy'} 8
解析:沒有使用 apply 方法時,test方法的this指向全局對象window,而當使用了apply方法後,將test的this指向從window變成了obj對象,然後面的數組參數則是將數組中元素依次對應到test方法形參的位置this
做用:改變this的指向問題, 是綁定函數的this,同時返回綁定後的新函數
例如
var fb = fn.bind(obj);
window.fb();不管誰調用fb函數, 函數的this都會指向obj
code
// ?bind的使用語法 // 函數名字.bind(對象,參數1,參數2,...); 實例: var obj = {key:"value"} var foo = function(){ console.log(this) } foo.bind(obj)() // obj
解析: 解析:在沒有使用bind方法時,foo()中的this指向的是全局對象window,而使用了bind方法以後則指向的是obj對象對象
做用:前兩個都是爲了改變this指向,bind是改變this指向而且複製這個方法返回接口
1. 三者均可以改變函數的this對象指向。部署
2. 三者第一個參數都是this要指向的對象,若是若是沒有這個參數或參數爲undefined或null,則默認指向全局window。io
3. 三者均可以傳參,可是apply是數組,而call是參數列表,且apply和call是一次性傳入參數,而bind能夠分爲屢次傳入。console
4. bind 是返回綁定this以後的函數,便於稍後調用;apply 、call 則是當即執行 。
粗體