1. 程式人生 > >JavaScript 面向物件之二 —— 函式上下文(call() 和 apply())

JavaScript 面向物件之二 —— 函式上下文(call() 和 apply())

本系列文章根據《愛前端邵山歡老師深入淺出的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]);