有这样一段代码:javascript
Array.prototype.concatAll = function() { var results = []; this.forEach(function(subArray) { results.push.apply(results, subArray); }); return results; };
其中有apply那句不是很理解,因而查了一下相关资料,了解了些许:java
此函数的原型为:app
fun.apply(thisArg, [argsArray])
主要做用是改变apply前面的函数执行的上下文环境。能够粗暴的理解为——将fun函数执行的主体改变为thisArg。例如:函数
a.fun.apply(b, [arg1, arg2]);
基本等价于:this
b.fun(arg1, arg2);
因而上述的那个语句等价于:prototype
Array.prototype.push.apply(results, subArray);
上面简化了Array.prototype 为results,少写了一个单词。code
而push函数的定义为:ip
arr.push(element1, ..., elementN)
而apply刚好能够将一串参数变为一个Array参数做为总体传给push函数。 因此使用apply是一个trick,使得一个Array作push操做时,能够接收另外一个Array做为参数。element