• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
麦兜家园
优秀是一种习惯
博客园    首页    新随笔    联系   管理    订阅  订阅
call()和apply()的区别

call和apply的相同点是:1、都可以调用函数;2、都可以改变this的指向

function add(c, d) {
    return this.a + this.b + c + d;
}
var strObj = { a: 1, b: 2};
console.log(add.apply(strObj,[3,3])); 
console.log(add.call(strObj,3,3)); 
//以上两个打印结果都是 9

不同点:

1、call的多个参数, 第一个参数是this指向的对象,后面的参数均是传入Function的参数,有两个就是传给Function两个参数,有三个就是传了三个,有几个传几个;

2、apply的只有两个参数,第一个参数是this指向的对象,第二个参数是传入Funtion的参数组成的数组。

apply实现取出数组中的最值:

//数组中的最大值:
var arr=[2,4,8,5,67,89,64,32,697]
Math.max.apply(Math,arr) //打印结果是 697


//数组中的最小值:
var arr=[2,4,8,5,67,89,64,32,697]
Math.min.apply(Math,arr) //打印结果是 2


//注意:因为apply第一个值是可以改变this的指向,这个案例不需要改变this指向,那么我们就指向调用者,所以第一个参数就传值Math

apply可以通过Array.prototype.push实现两个数组的合并:

push方法没有提供push一个数组,但是它提供了push(param1,param2...paramN),所以也可以用apply来转换一下这个数组

var arr1=[2,8,5,54,82,55];
var arr2=[6,4,35,34,21,93,432,23]
Array.prototype.push.apply(arr1,arr2);   //打印结果是5
 //得到合并后数组的长度,因为push就是返回一个数组的长度

也可以这样理解,arr1调用了push方法,参数是通过apply将数组转换为参数列表的集合。

当然,也有人可能会说数组合并也可以用数组的concat方法,可以是可以,但是要清除其区别是concat使用之后返回的是一个数组(当然也可以获取其长度),而通过apply将数组转化的结果是一个集合的长度。不同场景可以区别使用。

 

posted on 2021-05-25 10:30  麦兜家园  阅读(571)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3