JavaScript中的call()和apply()

昨天刚做了阿里的前端在线笔试题,其中有一道填空题如下

function func(){
  alert(this.valueOf());  
}

func._________;
//期望结果是abc

一开始看到这个题,就想到了call()和apply()方法,但无奈对这两个方法的的用法只是有个模糊的记忆。

于是,就针对这道题,自己对call()和apply()的用法进行了进一步的资料查阅和理解,在此记录一下以便加深印象,也便于以后查找。

作用:

在特定的作用域中调用函数。也就是设置函数体内this对象的值。

用法:

call()和apply()都接受两个参数:一个是在其中运行函数的作用域,另一个是传递的参数。

两者的主要区别在于:接收参数的方式不同。其中call()在接收参数时,参数必须一一列出;而apply()接收的参数必须是参数数组,可以是Array的实例,也可以是arguments对象。例如:

function sum(num1,num2){
    return num1+num2;
}    

function applySum1(num1,num2){
    return sum.apply(this,arguments); //传入arguments对象      
}

function applySum2(num1,num2){
    return sum.apply(this,[num1,num2]);  //传入数组
}

function callSum(num1,num2){
    return sum.call(this,num1,num2);  //传入参数一一列出
}

至于是使用call()还是apply(),完全取决于你采取哪种给函数传递参数的方式最方便。

所以一开始提到的填空题的答案也不唯一,这里就给出以下两种:

func.call("abc");
func.apply("abc");

 

posted @ 2015-08-19 15:12  huangyx  阅读(152)  评论(1编辑  收藏  举报