js中apply()的用法,及apply()和call()的区别
2018-01-04 14:36
316 查看
一、先说说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,个人的理解,有错误之处请予以指正
相关文章推荐
- js中apply和call的用法以及区别
- JS中apply和call的区别和用法
- Js中call和apply的区别和用法
- Js中call和apply的区别和用法
- 区别和详解:js中call()和apply()的用法
- js中apply和call的用法和区别
- js中call和apply的用法和区别
- js的call() ,apply() 两种方法的区别和用法,最白话文的解释,让枯燥滚粗!
- javascript(js)中函数apply和call的用法、区别、联系
- Js中apply与call的区别与用法
- js中call() apply() bind()的用法及三者区别
- js笔记:js中的call()和apply()用法与区别
- Js中call和apply的区别和用法
- js的call() ,apply() 两种方法的区别和用法,最白话文的解释,让枯燥滚粗!
- js中apply()和call()的区别与用法实例分析
- 详解js中的apply与call的用法
- js中call与apply的用法小结
- js apply/call/caller/callee/bind使用方法与区别分析
- js中call和apply的区别
- 关于JavaScript中apply与call的用法意义及区别