Разница между .call и .apply - PullRequest
       6

Разница между .call и .apply

2 голосов
/ 30 сентября 2011

Существует ли простой способ передачи всех аргументов из одной функции в другую и отправки 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?

Ответы [ 2 ]

4 голосов
/ 30 сентября 2011

Я думаю, вы только что обнаружили разницу сами.

call практически идентичен обычному вызову функции, за исключением того, что в начале списка параметров есть дополнительный параметр, в который вы помещаете ссылку для объекта this.

apply также имеет первый параметр в качестве объекта this, но второй параметр, как ожидается, будет массивом. Этот массив используется для предоставления всех аргументов, которые ожидает вызываемая функция. Элемент 0 соответствует первому аргументу в списке аргументов функций, элемент 1 - второму и т. Д.

1 голос
/ 30 сентября 2011

вызов MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

Вызывает функцию с данным значением и аргументами, предоставляемыми индивидуально .

fun.call(thisArg[, arg1[, arg2[, ...]]])

apply MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

Вызывает функцию с заданным значением и аргументами, представленными в виде массива .

fun.apply(thisArg[, argsArray])
...