这真的很傻,但我不能缩写console.log(我正在使用Chrome)。这是我天真的尝试:
var log = console.log;
log("Bingo"); // Uncaught TypeError: Illegal invocation
我应该使用apply()吗?但是我必须传递这些论点,对吧?
答案 0 :(得分:72)
这会失败,因为对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:
。
答案 1 :(得分:14)
简单的方法是将它包装在一个函数中:
var log = function (l) {
console.log(l);
}
但请注意,console.log可以使用无限数量的参数,因此适当的方法是:
var l = function () {
console.log.apply(console, arguments);
}