js中apply()与call()的总结,通俗简洁大白话

想到一种更通俗的解释

  • x.x的方法.apply(y,z)意为:y调用了“x的方法”,传入参数为z,z为数组形式
  • x.x的方法.call(y,z)意为:y调用了“x的方法”,传入参数为z,z为参数列表形式

---------------------------------以下为详细解释----------------------------------

1.apply(A,B)的总结

作用:

使用别人的函数,且将其参数传入形式改为类数组形式

参数说明:

  • 参数A是this指向,可传入一个对象,这个对象将会成为函数执行时的this
  • 参数B只能是数组或arguments对象

举例1:不修改this指向

   若 a=[5,7,6];
   则 Math.min.apply(null,a)=Main.min(5,7,6)=5
   意为:让参数A可以使用Math对象的min函数,且将参数B数组变成元素集合传入
   说明:参数A是为了改变函数执行时this指向,这里没有改变,所以传入null,this还是指向Math,此处null可换成Math或this

举例2:修改this指向

   若 arr1=[1,2];arr2=[3,4]
   则 Array.prototype.push.apply(arr1,arr2)=arr1.push(3,4)
   备注:push不可推入数组,只可推入参数

举例3:不修改this指向的另一种做法

   Math.min.apply(null,a)=Math.min(...a)
   ...是扩展运算符

用于什么时候:

apply即可使用别人的函数,也可改变参数的传入方式。
若单用前者可用call方法实现;
若单用后者可用扩展运算符实现。

2.call(A,list)的总结

作用:

使用别人的函数

举例1:call与apply的区别

    a.fun1.call(b,2,3)  正确
    a.fun1.call(b,[2,3]) 会报错
    a.fun1.aplly(b,[2,3]) 正确
    a.fun1.apply(b,2,3) 会报错

举例2:call/apply可只传入一个参数

    animal对象有showName方法,cat对象没有
    animal.showName.call(cat); //此句让cat对象调用了animal对象的showName方法
    animal.showName.apply(cat)同上

用于什么时候:

call不可改变参数的传入方式,所以常用来使用别人的函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值