为了账号安全,请及时绑定邮箱和手机立即绑定

javascript 里面关于 apply 绑定的不理解

javascript 里面关于 apply 绑定的不理解

繁花如伊 2019-05-21 17:22:21
本人新手,最近在看有关javascript相关的书籍的时候遇到了这么一段代码,不是特别理解,有关apply绑定的,代码如下:constconcatAll=(array)=>{letresult=[]for(letvalueofarray){result.push.apply(result,value)}returnresult}letletters=[['a','b'],['c','d']]console.log(concatAll(letters))//['a','b','c','d']简单来说concatAll这个函数就是可以将嵌套数组转换成一个数组,我所不理解的是代码第4行,apply这个方法到底是怎样运行的,之前学有关this的知识也是有点迷迷糊糊的,不是特别理解,希望能有前辈给出一个详细的解答谢谢!
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

这个是apply的一个比较巧妙的用法,apply的第一个参数是this对象,第二个参数是数组集合。这里巧妙的点在于她可以将一个数组迷人的转换成一个参数列表([paramA,paramB,paramC])转换成(paramA,paramB,paramC)。利用这个特点,可以高效使用她用于数组的合并:Array.prototype.push!
push方法没有提供push一个数组,但是它提供了push(param1,param,…paramN)所以同样也可以通过apply来转换一下这个数组。也就是你代码的实现。不知道你懂了没:)
                            
查看完整回答
反对 回复 2019-05-21
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

在调用一个存在的函数时,你可以为其指定一个this对象。this指当前对象,也就是正在调用这个函数的对象。使用apply,你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。
apply与call()非常相似,不同之处在于提供参数的方式。apply使用参数数组而不是一组参数列表(原文:anamedsetofparameters)。apply可以使用数组字面量(arrayliteral),如fun.apply(this,['eat','bananas']),或数组对象,如fun.apply(this,newArray('eat','bananas'))。
你也可以使用arguments对象作为argsArray参数。arguments是一个函数的局部变量。它可以被用作被调用对象的所有未指定的参数。这样,你在使用apply函数的时候就不需要知道被调用对象的所有参数。你可以使用arguments来把所有的参数传递给被调用对象。被调用对象接下来就负责处理这些参数。
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 400 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信