JavaScript(9)——call与apply

call与apply

call和apply方法可以通过函数名称来调用函数。有两个参数

call()方法与apply()方法的作用相同,他们的区别仅在于接收参数的方式不同。

【call】

调用一个对象的一个方法,以另一个对象替换当前对象。

call()方法是与经典对象冒充方法最相似的方法。他的第一个参数用作this对象,其他参数都直接传递给函数自身。

对于call而言,第一个参数是上下文对象,第二个参数是不同的函数参数。

call是通过参数列表来完成传递, 其他与apply没有区别

【apply】

应用某一对象的一个方法,用另一个对象替换当前对象。

对于apply而言,有两个参数,第一个是调用的上下文,第二个是参数数组,可以直接把argument传进去。

【call与apply的用法与区别】

function sum(num1,num2){
    return num1+num2;
}
function callSum1(num1,num2){
    //使用sum这个函数来完成一次调用,调用的参数就是函数callSum1这个函数的参数
    //apply的第二个参数代表一组参数数组
    return sum.apply(this,argument);
}
function callSum2(num1,num2){
    //第二个参数是数组
    return sum.apply(this,[num1,num2]);     
}
function callSum3(num1,num2){
    //通过参数列表来完成传递  
    return sum.call(this,num1,num2);
}

如果直接传入argument对象,或者包含函数中先接收到的也是一个数组,那么使用apply()方法比较方便,否则,选择call()更加合适。如果在不给函数传递参数的情况下,使用哪个方法都可以。

call()与apply()真正强大的地方是能够扩充函数赖以运行的作用域。使用call()(或apply())来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。

posted on 2016-09-20 22:06  可不可以多加点辣椒  阅读(141)  评论(0编辑  收藏  举报