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())来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。