JavaScript 的call 与 apply

有这样一段代码:javascript

Array.prototype.concatAll = function() {
	var results = [];
	this.forEach(function(subArray) {
		results.push.apply(results, subArray);
	});

	return results;
};

其中有apply那句不是很理解,因而查了一下相关资料,了解了些许:java

关于apply/call

此函数的原型为: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

相关文章
相关标签/搜索