js中apply()的用法,及apply()和call()的区别

一、先说说apply()

在MDN上面是这么解释的:

The apply() method calls a function with a given this value, and arguments provided as an array (or an array-like object).
//该apply()方法调用具有给定this值的函数,并arguments以数组(或类似数组的对象)的形式提供。

个人理解:
对象a下面有一个方法fn,
调用fn:a.fn()
很明显这个fn里面的this指向是a;
那如果想改变this的指向,想让它指向对象b;
那么就是:
a.fn.apply(b)

具体方法:

function.apply(thisObj, [argsArray])

function:要调用的方法
thisObj:方法里面的this指向的对象
[argsArray]:调用方法传入的参数,接收的是一个数组

话不多说,上个栗子

    //构造函数
    function creatFn (name){
        this.name = name;
        };
    var a = new creatFn('小a');
    var b = new creatFn('小b');
//对象a下面的方法say
    a.say = function(a,b){
        console.log(this.name,a+b);

    }
    //正常调用
    a.say(1,2);//输出: 小a,3
    //this指向b对象
    a.say.apply(b,[3,4]);//输出 :小b,7 

二、那么call()和apply()之间的区别呢

他们在功能上说,还真的说出来区别

在写法上面是有区别的

如上例的最后一步

a.say.apply(b,[3,4])

换成apply就该这么写了

a.say.call(b,3,4)

有木有发现区别?
就是apply总共是两个参数,第二个参数是个数组,是调用方法的参数集合
但是call就有n个参数了,第一个是方法里面的this指向的对象,剩下的参数就全是给调用方法的参数们了。

三、好处在哪呢?

要说好处的话,就想说说apply的一个聪明的用法
下面这个方法:

Math.max(num1,num2,num3,num4,num5)

这个方法就是返回的就是传入的那些参数中最大的数字;

来一道常见的面试题:
如何从下面数组中找出最大值

var arr =[1,2,3,5,7,9.9,100,189]

那么就可以用Math.max()方法了,无奈的是他不接受一个数组啊,这时候apply()就该闪亮登场了

//利用apply可以让方法在调用的时候将所有的参数以数组的形式传入
Math.max.apply(null,arr)

注意:如果不想改变this的话,第一个参数传入null就可以了

该方法同样适用于求最小值

Math.min.apply(null,arr)

同样的还有一个方法

arr.push()

追加到数组
假如

var arr1 = [1,2,3]
var arr2 = [4,5,6]

如果我想把arr1和arr2合并,也可以用push的方法,怎么用呢?

//下面是错误示例
arr1.push.apply(null,arr2)

为什么不能这么写呢,因为push是Arrary的方法呀,

//正确写法
Array.prototype.push.apply(arr1,arr2)

以上是参照MDN,个人的理解,有错误之处请予以指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值