JavaScript 面向对象之二 —— 函数上下文(call() 和 apply())

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zx562602419/article/details/72453860

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

猜你喜欢

转载自blog.csdn.net/zx562602419/article/details/72453860