【问题标题】:Override console.log in coffeescript在咖啡脚本中覆盖 console.log
【发布时间】:2013-08-24 13:27:17
【问题描述】:

有时我们会在 javascript 中留下 console.log 调试语句。为了不让它们意外地投入生产(一些旧浏览器会死在这些地方),我们尝试在我们的第一个咖啡脚本文件中这样做:

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

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

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

有什么想法吗?谢谢!

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    问题是这样的:

    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 有多种说法,效果相同,请使用对您来说最清楚的一种。

    【讨论】:

    • 我个人只使用if window.console?
    • @ChrisHeald:甚至window.console ||= log: ->
    【解决方案2】:

    我的方法是定义一个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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-15
      • 2019-10-16
      • 1970-01-01
      • 2013-05-11
      • 2015-06-09
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多