2013-08-22 28 views
0

有時我們會在我們的javascript中留下console.log調試語句。只是讓自己不小心讓它投入生產(其中一些舊的瀏覽器將這些死),我們試圖在我們的第一個文件的CoffeeScript這樣做:覆蓋coffeescript中的console.log

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

但這似乎殺使用控制檯的所有能力。即使在支持它的瀏覽器(webkit)中登錄開發。

console?返回false,所以if塊不運行,但它似乎仍然覆蓋console.log的功能。

任何想法?謝謝!

回答

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具有相同的效果,請使用哪一個最清晰。

+0

我只是使用'如果window.console?',親自。 –

+0

@ChrisHeald:甚至是'window.console || = log: - >' –

+0

工作!萬分感謝。 –

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