是否有一种简单的方法可以将所有参数从一个函数传递到另一个函数并发送this
。
我试过这个:http://jsfiddle.net/v92Xr/
var f1 = function() {
f2.call(this, arguments);
};
var f2 = function() {
console.log(arguments);
};
f1("abc", "def", "hij");
但它让我从f1的所有参数都堆叠在f2参数0:
中f2->arguments[0] == f1->arguments
好的,当我运行apply
方法时,它可以正常运行:http://jsfiddle.net/v92Xr/1/
var f1 = function() {
f2.apply(this, arguments);
};
var f2 = function() {
console.log(arguments);
};
f1("abc", "def", "hij");
所以有人可以告诉我call
和apply
之间有什么区别吗?
答案 0 :(得分:4)
我认为你刚刚发现了自己的不同之处。
call
几乎与您通常调用函数的方式相同,只是在参数列表的开头有一个额外的参数,您可以在其中放置this
对象的引用。
apply
也有第一个参数作为this
对象,但第二个参数应该是一个数组。此数组用于提供被调用函数所期望的所有参数。元素0映射到函数参数列表中的第一个参数,元素1映射到第二个参数,依此类推。
答案 1 :(得分:1)
致电 MDN:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call
调用具有给定此值的函数和单独提供的参数。
fun.call(thisArg[, arg1[, arg2[, ...]]])
应用 MDN:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply
使用给定的此值调用函数,并以数组的形式提供参数。
fun.apply(thisArg[, argsArray])