Применить () вопрос для JavaScript - PullRequest
6 голосов
/ 09 января 2011

Я изучаю следующий код для входа

console.log.apply( console, arguments );

Какова цель apply() здесь?

Почему не просто console.log("message", arguments)?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 09 января 2011
console.log("message", arguments)

вызывает log с двумя аргументами, "message" и аргументами в виде массива.

console.log.apply( console, arguments );

вызывает его с n аргументами, где n - длина аргументов объекта в виде массива. Другими словами, аргументы развертываются в отдельные аргументы. Контекст метода - console. E.g.:

function foo(a, b, c)
{
  console.log.apply( console, arguments );
}
foo(1,2,3);

примерно эквивалентно:

console.log(1,2,3);
7 голосов
/ 09 января 2011

Функция apply() вызывает другую функцию с заданным значением this и arguments в виде массива.

Причина неявного func.apply(obj, args) состоит в том, чтобы убедиться, что в func(), this относится к obj.

1 голос
/ 12 сентября 2014

Я думаю, что оба ответа не объяснили, почему. Реальное блестящее использование этого способа программирования.

Мне не понравился первый голосующий ответ, я не мог понять его, даже читая трижды, а второй чувствовал себя неполным.

Я думаю, что основная цель написать этот способ - использовать его внутри функции (или замыканий).

Итак, эта строка имеет смысл только внутри настроенного логгера: console.log.apply (console, arguments);

Вероятно, это был лучший подход, чем написать что-то вроде этого:

function my_worse_way_to_log_dynamic_args ( [several dynamic arguments] )
{
    // loop each argument
    // call console.log for each one
}

function my_better_way_to_log_dynamic_args ( [several dynamic arguments] )
{
    console.log.apply( console, arguments );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...