首页 > 移动平台 > 详细

JavaScript中的call()和apply()

时间:2015-08-19 16:30:34      阅读:232      评论:0      收藏:0      [点我收藏+]

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

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");

 

JavaScript中的call()和apply()

原文:http://www.cnblogs.com/huangyx/p/4742296.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!