Подтвердить что ты не робот

Аббревиатура console.log в JavaScript

Возможный дубликат:
псевдоним chrome console.log

Это действительно глупо, но я не могу аббревиатура console.log(я использую Chrome). Вот моя наивная попытка:

var log = console.log;
log("Bingo");  // Uncaught TypeError: Illegal invocation

Должен ли я использовать apply()? Но тогда мне придется передать аргументы, верно?

4b9b3361

Ответ 1

Это не удается, потому что ссылки на методы Javascript не содержат ссылки на сам объект. Простой и правильный способ присвоения переменной console.log переменной, а вызов относится к console, заключается в использовании метода bind для метода log, передающего console в качестве аргумента:

var log = console.log.bind(console);

Существует скрытый аргумент this для каждого метода, и из-за плохого дизайна языка он не закрывается, когда вы получаете ссылку на метод. Цель метода bind состоит в том, чтобы предварительно назначить аргументы функциям и вернуть функцию, которая принимает остальные аргументы, ожидаемые функцией. Первый аргумент bind всегда должен быть аргументом this, но вы можете фактически назначить любое количество аргументов, используя его.

Использование bind имеет значительное преимущество в том, что вы не теряете способность метода принимать больше аргументов. Например, console.log может фактически принять произвольное количество аргументов, и все они будут объединены в одну строку журнала.

Вот пример использования bind для переназначения большего количества аргументов на console.log:

var debugLog = console.log.bind(console, "DEBUG:");

Вызов debugLog будет префикс сообщения журнала с помощью DEBUG:.

Ответ 2

Простым способом будет обернуть его в функцию:

var log = function (l) {
   console.log(l);
}

Но обратите внимание, что console.log может принимать неограниченное количество аргументов, поэтому соответствующий способ будет делать это:

var l = function () {
   console.log.apply(console, arguments);
}