Переадресация вызова из одной функции в другую

Рейтинг: 1Ответов: 1Опубликовано: 30.12.2014
function f() {
    g.apply(null, arguments);
}

function g(a, b, c) {
    alert( a + b + c );
}

f(1, 2, 3); // 6

Почему срабатывает данный код? Вызываем функцию g в контексте NULL. Иными словами вызываем g как метод объекта NULL. О как?

Ответы

▲ 1

Нет. Вы не вызываете функцию как метод объекта null. Вы вызываете функцию с контекстом null. Контекст - это просто некое значение, доступное в функции через ключевое слово this и быть там может что угодно.Вот одно из самых популярных применений:

function test (a,b,c) {
  var args = Array.prototype.slice.call(arguments); // вызываем метод slice, "заточенный" под массивы, для массиво-подобного объекта arguments. Так часто приводят объект arguments к массиву
  console.log(Array.isArray(args));
  console.log(Array.isArray(arguments));
};