我使用以下代码来获取JavaScript调用方函数名:
var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")
有没有办法发现调用该方法的行号?
另外,有没有办法获得调用该方法的JavaScript文件的名称?或者源URL?
发布于 2010-09-28 02:14:24
这在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);
发布于 2009-08-28 17:16:14
kangax的解决方案引入了不必要的try..catch作用域。如果你需要访问JavaScript中的行号(只要你使用的是火狐或Opera语言),只需访问(new Error).lineNumber
即可。
发布于 2016-05-07 04:45:25
令我惊讶的是,这些答案中的大多数都假设您希望处理错误,而不仅仅是在正常情况下输出有用的调试跟踪。
例如,我喜欢使用这样的console.log
包装器:
consoleLog = function(msg) {//See https://stackoverflow.com/a/27074218/470749
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]
请参阅https://stackoverflow.com/a/27074218/和A proper wrapper for console.log with correct line number?
https://stackoverflow.com/questions/1340872
复制相似问题