我在Javascript中有一个新问题。如果在调用以下MyInit函数之前调用console.log(某些东西)(在一个简单的html页面中),我会得到一个异常,因为没有定义控制台。没关系。但是我没有看到MyInit函数做了什么使其工作:看起来它将日志函数定义为空的东西,什么都不做。它是如何从我提供的定义到写入控制台的实际控制台日志功能的?
function MyInit()
{
if (!window.console) console = { log: function () { } };
}
...
<!-- later -->
console.log("OnMouseOver occurred.");
答案 0 :(得分:1)
分解MyInit()
:
if (!window.console) // If `window` does not have a `console` property
console = { // Declare `console` object
log: // Add `log` key
function () { } }; // ...which is a function which does nothing
这将允许引用console
和console.log
而不会抛出任何错误。 console.log("OnMouseOver occurred.");
在默认情况下不支持window.console
的浏览器上不做任何操作。
为了更清楚地显示这一点,我创建了一个JSFiddle demo来反转此方法。在此演示中,我们检测是否支持window.console
,如果是,我们将覆盖console.log
设置为等于此空函数。当你运行它时,你会看到我们的console.log("Hello, world!")
调用没有记录任何东西到控制台,但它同样不会抛出任何未定义的错误。
简而言之,MyInit()
不会使其正常工作,它只是创建一个console.log
函数,它不会做任何事情。