javascript中call()和apply()的用法及区别详解

想必大家也都了解些植物养殖方面的知识吧。那“嫁接”是如何做的呢?“嫁接”又有什么好处可言呢?

那就先来了解一下“嫁接”一词?

嫁接,即:一种植物的枝或芽,嫁接到另一种植物的茎或根上,使接在一起的两个部分长成一个完整的植株。接上去的枝或芽,叫做接穗,被接的植物体,叫做砧木或台木。嫁接的好处在于:接惠可以利用到自身不有而砧木所具有的有利特性,如:抗寒,抗旱,抗病虫害等。

接下来,言归正传……

那javascript中的call()和apply()是如何来使用的呢?没错,正如上面讲的“嫁接”一词,我们可以抽象的把call()或apply()方法理解为:将函数A(“砧木”函数)所具有的特有功能方法提供给函数B(“接穗”函数)使用。这样一来,函数B就可以快速实现函数A所具有的功能。代码如下:

function provider(a,b,c,d){
    alert(a+b+c+d);
}

function receiver(x,y,m,n){
    //call()的用法;
    provider.call(this,x,y,m,n);
    //apply()用法;
    //provider.apply(this,[x,y,m,n]);
}
//调用receiver函数;
receiver("js ","boostrap ","sass ","node.js ");

代码分析

代码执行过后,大家明显可以发现,分别使用call()方法和apply()方法,在UI表现上都是一样的,会出现一个弹框。也就是说,两种方法所能起到的作用是一样的。即:实现不同函数间功能的“嫁接”。这也就是两者的共同点了。

两者的不同点也已经很明显了。

call()和apply()方法,在功能上是一样的,区别就在于各自的参数设置上。
provider.call(this,x,y,m,n)中this后的参数要依据“砧木”函数中的参数设置依次给出(形式保持一致);而provider.apply(this,[x,y,m,n])所提供的参数只有两个,一个是this,另一个就是数组形式的参数或是arguments(表示参数的一个集合,在参数不明确时,推荐使用!)。总的来说,两者的区别就是:使用时,传递给“砧木”函数的参数形式不同,call()是将this后的参数依次传递给“砧木”函数,apply()则是将this后的参数放到一个数组中,以数组的形式传递给“砧木”函数。

以上就是javascript中call()和apply()两个方法的比较。希望能帮助的需要帮助的朋友!如有牛人发现问题,还请及时留言指出。谢谢!

注:转载请说明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值