Наиболее вероятное объяснение состоит в том, что функция info
объекта console
ожидает, что this
в функции будет объектом console
. Это не будет так, если вы сделаете это:
var e = console.info;
e("Foo");
Помните, что в JavaScript this
полностью определяется , как функция вызывается , а не там, где она определена. Подробнее: Мифические методы и Вы должны запомнить this
.
Вы должны сделать это вместо этого:
e.call(console, "Foo");
... что явно не короче.
Таким образом, чтобы сделать это надежно, вместо этого вы должны создать функцию:
function e(msg) {
console.info(msg);
}
jИнди указал, что мы также можем использовать для этого Function#bind
(часть ES5), поскольку в Chrome это есть, а в Chrome console.info
- настоящая функция JavaScript. Итак:
e = console.info.bind(console);
Это будет работать только в браузерах, которые поддерживают ES5 (например, не в IE8 и более ранних версиях), и где console.info
- это real функция JavaScript (некоторые функции, предоставляемые хостом в некоторых браузерах, хотя я думаю console.info
на большинстве, если не на всех). Но если вы ориентируетесь на Chrome, вы золотой. Кроме того, bind
- это одна из функций ES5, которую тривиально реализовать в браузере не-ES5 (проект es5-shim.js и некоторые другие). Но реализация bind
исключительно для этого использования, вероятно, излишняя, просто используйте function e(msg) { .. }
выше. : -)
Живой пример всего вышеперечисленного