gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:32:43 26 4
gpt4 key购买 nike

所以我很懒惰,喜欢给 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com