本系列文章根据《爱前端邵山欢老师深入浅出的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]);