我使用以下内容来获取JavaScript调用者函数名称:
var callerFunc = arguments.callee.caller.toString(); callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")
有没有办法发现调用该方法的行号?
另外,有没有办法获取调用该方法的JavaScript文件的名称?还是源URL?
这适用于chrome/QtWebView
function getErrorObject(){ try { throw Error('') } catch(err) { return err; } } var err = getErrorObject(); var caller_line = err.stack.split("\n")[4]; var index = caller_line.indexOf("at "); var clean = caller_line.slice(index+2, caller_line.length);
kangax的解决方案引入了不必要的try..catch范围.如果您需要访问JavaScript中的某些行号(只要您使用的是Firefox或Opera),只需访问即可(new Error).lineNumber
.
我很惊讶大多数这些答案都假设您想要处理错误而不仅仅是为正常情况输出有用的调试跟踪.
例如,我喜欢使用这样的console.log
包装器:
consoleLog = function(msg) {//See /sf/ask/17360801/ var e = new Error(); if (!e.stack) try { // IE requires the Error to actually be thrown or else the // Error's 'stack' property is undefined. throw e; } catch (e) { if (!e.stack) { //return 0; // IE < 10, likely } } var stack = e.stack.toString().split(/\r\n|\n/); if (msg === '') { msg = '""'; } console.log(msg, ' [' + stack[1] + ']'); }
这最终会将以下输出打印到我的控制台:
1462567104174 [getAllPosts@http://me.com/helper.js:362:9]
请参阅/sf/ask/17360801/以及具有正确行号的console.log的正确包装器?