JavaScript 面向物件之二 —— 函式上下文(call() 和 apply())
阿新 • • 發佈:2018-11-09
本系列文章根據《愛前端邵山歡老師深入淺出的js面向物件》視訊整理歸納
call() 和 apply()
這兩個都是函式的方法,只有函式能夠通過點方法呼叫call()、apply(),表示用指定的上下文執行這個函式。
如下,定義一個函式 fun,當 fun 函式裡面的 this 必須指向 obj 時,我們就可以通過函式呼叫 call 、apply 來指定上下文。
function fun(){
console.log(this.age);
}
var obj = {
'name' = '張鑫',
'age' = 25
}
fun.call(obj);
fun.apply(obj);
呼叫 call 和 apply 都會輸出 25。
語法:
函式.call(上下文);
函式.apply(上下文);
這兩個方法的區別在於傳參的形式不同,call 方法傳參需要將各引數用逗號隔開,而 apply 方法的引數必須是以陣列的形式進行傳遞。如下所示:
function fun(a,b,c){
console.log(this.age);
console.log(a + b +c);
}
var obj = {
'name' = '張鑫',
'age' = 25
}
fun.call(obj,1,2,3);
fun. apply(obj,[1,2,3]);
最終都會輸出 25 6
最常見的運用莫過於求陣列的最大值。
我們都知道 Math.max() 方法,它只接受單獨羅列的引數,要想用這個方法來求陣列最大值,我們可以根據 apply 的傳參必須是陣列的這個特性,運用到 Math.max() 方法中來求陣列的最大值,如下:
Math.max.apply(window,[1,23,456,98]);