2013-11-25 47 views
1

我正在使用簡單的日誌功能。當我使用我的代碼登錄時,它會在寫入的行號處顯示控制檯消息,而不是它正在調用的地方(顯然它會)。是否有可能獲得我正在使用它來正確調試我的代碼的行號?提前致謝!如何顯示日誌使用的行號?

/** 
* Description: Console log 
* @param {Object} p_sMessage 
*/ 
function log(p_sMessage) { 
    if(!Debug) { return; } 
    else { if(window.console) { console.log(p_sMessage); }} 
} 
+0

嘗試拋出一個異常並捕獲它,然後看看你可以從堆棧跟蹤中提取什麼。 – gustavohenke

+0

@Florent不是一個人,這是問如何獲得調用函數**的行**的行號。 – Doorknob

回答

2

什麼改變你的代碼如下:

log = Debug && window.console 
    ? window.console.log.bind(window.console) 
    : function() {}; 

這樣log將只是充當一個別名對於window.console.log,因此不會向堆棧跟蹤添加另一個步驟。

+0

太棒了!感謝SROES。 – KunJ

+0

不客氣:) – sroes

+0

請注意,IE 8或更低版本不支持'.bind'。如果你需要支持它,請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility – sroes

2

使用此函數獲取調用者的行號:

function getLineNumber(){ 
    return (new Error).stack.split("\n")[4] 
} 
+0

這會得到函數的行號,而不是函數調用者的行號。 – Doorknob

+0

不,這將得到調用者的行號(新錯誤).stack.split(「\ n」)[1]獲取函數的行號。你可以嘗試它看到它的工作。 –

+0

對不起,我的錯。我編輯你的答案要更清楚一些,並且+1 – Doorknob