let cfn = function
(a1,a2,a3)
cfn.call(null,1,2,3)//輸出 1 2 3
call接受的引數不固定(從第二個引數開始往後,依次將作為引數傳遞給被呼叫函式)。
let afn = function
(a1,a2,a3)
他們的第乙個引數都是呼叫函式中(函式體內)的this物件指向。示例中我們傳入的第乙個引數是null,則afn和cfn中的this指向是宿主物件即window,如果是在嚴格模式下,函式體內的this物件還是指向null。
let o1 =
let o2 =
let fn = function
()fn();//輸出為""(空字串) 此時this指向window,window物件的name屬性沒有被賦值
fn.call(o1);//改變fn內部this指向並呼叫fn方法 輸出"cjf"
有時會出現函式內部this丟失問題
let obj =
}obj.fn();//輸出"cjf"
let test = obj.fn;//this引用丟失,此時this指向window物件window物件的name屬性沒有被賦值
test();//輸出空字串
//或者
test.call(obj);//改變test內部this指向並呼叫test方法 輸出"cjf"
b、實現bind方法 (指定函式內部this指向),大部分現代瀏覽器都實現了內建bind方法,沒有的我們也可以模擬實現乙個bind方法
function.prototype.bind = function
()}
呼叫bind方法,他改變函式體內this指向並返回的是乙個新的函式。
let obj =
let fn = function
(a1,a2,a3,a4)
let fnnew = fn.bind(obj,'a','b');//呼叫bind方法,返回的新函式
fnnew('c','d');//呼叫新函式
.shift.call(arguments)
.slice.call(arguments)
.concat.call(args,.slice.call(arguments))
(function
())('a','b','c')
JS中apply call和bind的區別
在js中,這三者都是用來改變函式的this物件的指向的,他們有什麼樣的區別呢。在說區別之前還是先總結一下三者的相似之處 1 都是用來改變函式的this物件的指向的。2 第乙個引數都是this要指向的物件。3 都可以利用後續引數傳參。那麼他們的區別在 的,先看乙個例子。var xw var xh xw...
JS中的apply call和bind的用法和區別
如果第乙個傳入的引數是null,那麼,在函式體內的this會指向全域性物件,在瀏覽器中就是window 2 call 當採用call呼叫的時候 3 bind 和call很相似 區別在於bind方法返回值是函式以及bind接收的引數列表的使用。call 是把第二個及以後的引數作為 fn 方法的實參傳進...
深入理解JS的apply call
主要解決以下幾個問題 function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this物件 params 這個是乙個引數列表 定義乙個人類 function person name,age 定義乙個學生類 functionstudent...