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

本人新手,最近在看有关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的知识也是有点迷迷糊糊的,不是特别理解,希望能有前辈给出一个详细的解答
谢谢!
繁花如伊
浏览 401回答 2
2回答

狐的传说

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

有只小跳蛙

在调用一个存在的函数时,你可以为其指定一个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来把所有的参数传递给被调用对象。被调用对象接下来就负责处理这些参数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript