JavaScript之call() 、apply() 函数

使用如下两个方法,可以修改函数调用上下文,也就是this的值
apply()
函数.apply(对象, 函数需要参数列表,是一个数组)

call()
函数.call(对象,arg1,arg2,arg3…argn)

call和apply的区别:
1.第一个参数都是要把this修改成的对象;
2.当函数需要参数的时候,那么apply是用数组进行参数的传递;
3.而call是使用单个的参数进行传递。

call用于确定了函数的形参有多少个的时候使用;
apply用于函数的形参个数不确定的情况。
apply方法和call方法第一个参数传递null的时候,都表示为函数调用模式,也就是将this指向window。

apply()的一些巧妙应用方法。
1)Math.max 可以实现得到数组中最大的一项
因为Math.max 参数里面不支持Math.max([arg1,arg2]) 也就是数组,但是它支持Math.max(arg1,arg2,arg3…),所以可以根据apply的特点来解决 。var max=Math.max.apply(null,array)这样可以得到一个数组中最大的一项(apply会将一个数组转换为一个参数接一个参数的传递给方法)。这块在调用的时候第一个参数给了一个null,这是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,所以直接传递了一个null过去。如果把null写成this也是可以的,因为这个this指的是这个方法中的this,同样可以达到这个效果。

2)Math.min 可以实现得到数组中最小的一项
同样和 max是一个思想 var min=Math.min.apply(null,array);

3)Array.prototype.push 可以实现两个数组合并
同样push方法没有提供push一个数组,但是它提供了push(param1,param,…paramN) 所以同样也可以通过apply来转换一下这个数组,也可以这样理解,arr1调用了push方法,参数是通过apply将数组转换为参数列表的集合。即:

var arr1 = new Array("1","2","3");   
var arr2 = new Array("4","5","6");   
Array.prototype.push.apply(arr1,arr2);  
console.log(arr1);//[ '1', '2', '3', '4', '5', '6' ] 

在这个例子中,如果我们按照平时的方法,要把arr2拼接到arr1中的话,我们需要把 arr2展开,然后一个一个追加到arr1中去,最后让arr1=[1,2,3,4,5,6],代码如下所示,直接用arr1.push(arr2)显然是不行的。

var len = arr2.length;  
for(var i = 0 ; i < len ; i++){  
    arr1.push(arr2[i]);   
}  
console.log(arr1);//[ '1', '2', '3', '4', '5', '6' ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值