首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取JavaScript调用者函数行号和调用者来源URL

如何获取JavaScript调用者函数行号和调用者来源URL
EN

Stack Overflow用户
提问于 2009-08-27 12:49:07
回答 13查看 125.4K关注 0票数 119

我使用以下代码来获取JavaScript调用方函数名:

代码语言:javascript
复制
var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")

有没有办法发现调用该方法的行号?

另外,有没有办法获得调用该方法的JavaScript文件的名称?或者源URL?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-09-28 02:14:24

这在chrome/QtWebView中适用

代码语言:javascript
复制
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);
票数 109
EN

Stack Overflow用户

发布于 2009-08-28 17:16:14

kangax的解决方案引入了不必要的try..catch作用域。如果你需要访问JavaScript中的行号(只要你使用的是火狐或Opera语言),只需访问(new Error).lineNumber即可。

票数 27
EN

Stack Overflow用户

发布于 2016-05-07 04:45:25

令我惊讶的是,这些答案中的大多数都假设您希望处理错误,而不仅仅是在正常情况下输出有用的调试跟踪。

例如,我喜欢使用这样的console.log包装器:

代码语言:javascript
复制
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?

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1340872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档