javascript - e = 控制台信息;不在 chrome 中工作

标签 javascript google-chrome console

所以我很懒惰,喜欢给 console.info 一个新的函数名称 :) 但我也想安全起见,确保我可以离开我的登录状态,而不是在不支持控制台的浏览器中出错。 所以我写了这个:

if (typeof console == "object" && typeof console.error == "function") {
    e = console.info; 
}

现在问题只出现在 chrome 中,并得到如下错误:

Uncaught TypeError: Illegal invocation

对我来说,这似乎是一个非常普遍的错误。

最佳答案

最可能的解释是 console 对象的 info 函数期望函数中的 this 将是 console对象。如果您这样做,情况就不同了:

var e = console.info;
e("Foo");

请记住,在 JavaScript 中,this 完全由调用函数的方式定义,而不是定义它的位置。更多:Mythical methodsYou must remember this .

你必须改为这样做:

e.call(console, "Foo");

...这显然不会更短。

因此,要可靠地执行此操作,您必须改为创建一个函数:

function e(msg) {
    console.info(msg);
}

jAndy 指出我们也可以为此使用 Function#bind(ES5 的一部分),因为 Chrome 有这个功能,而且在 Chrome 上,console.info 是一个真实的JavaScript 函数。所以:

e = console.info.bind(console);

这只适用于支持 ES5 的浏览器(例如,不支持 IE8 和更早版本)并且 console.info 是一个真正的 JavaScript 函数(一些主机-在某些浏览器上提供的功能不是,尽管我认为 console.info 在大多数(如果不是全部)上。但是,如果您的目标是 Chrome,那您就太好了。此外,bind 是在非 ES5 浏览器中很容易实现的 ES5 功能之一(es5-shim.js project 和其他几个浏览器)。但是纯粹为了这个用途而实现 bind 可能有点矫枉过正,只需使用上面的 function e(msg) { .. } 即可。 :-)

Live example of all of the above

关于javascript - e = 控制台信息;不在 chrome 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8802649/

相关文章:

javascript - 在包装器 div 内获取视口(viewport)内的 div

javascript - Uncaught ReferenceError : define is not defined

javascript - 为什么 CraftyJS/Chrome 会限制并发按键事件的数量?

javascript - 无法加载 chrome 中 500 内部服务器错误的响应

grails - grails run-app>看不到终端输入

javascript - 如何在特定页面停止 jQuery 插件?

javascript - 通过数组名称进行 Firestore 查询

javascript - 在 main.ts (typescript) 内的一个函数中加载外部 javascript 函数

Python:打印到一行,打印之间有时间延迟

c# - 自进程的重复控制台输出