覆盖coffeescript中的console.log

时间:2013-08-22 00:36:26

标签: javascript coffeescript

有时我们会在我们的javascript中留下console.log调试语句。只是因此他们不会意外地将其投入生产(一些旧的浏览器将死于这些),我们尝试在我们的第一个coffeescript文件中执行此操作:

if !console?
  console = {log: ->}

但这似乎会破坏开发中使用console.log的所有能力,即使在支持它的浏览器(webkit)中也是如此。

console?返回false,因此if块不会运行,但它似乎仍会覆盖console.log的功能。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

问题在于:

if !console?
  console = {log: ->}

成为这个JavaScript:

var console;

if (typeof console === "undefined" || console === null) {
  console = {
    log: function() {}
  };
}

结果是您有一个本地console变量,它隐藏了您正在寻找的window.console

解决方案就是说出你的意思:

if 'console' !of window
  window.console = { log: -> }

请注意console始终本地化为window,因此您不会意外地创建任何阴影。

有多种方式可以说if 'console' !of window具有相同的效果,请使用最适合您的方式。

答案 1 :(得分:0)

我的方法是定义要使用的DEBUG(或print)函数,而不是console.log。默认的生产定义是

DEBUG = () ->

在任何测试代码之前(例如最后像Python if __name__...阻止):

if not module.parent? and (!process.argv[2]? or process.argv[2]!='nodebug')
    DEBUG = (arg...) ->
      arg.unshift('==> ')
      console.log arg...

或只是

DEBUG = console.log