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]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值