您的位置:首页 > 移动开发

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

2017-05-17 22:34 447 查看
本系列文章根据《爱前端邵山欢老师深入浅出的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]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息