我现在正在开发一个应用程序,并放置一个全局isDebug开关.我想换行console.log以方便使用.
//isDebug controls the entire site.
var isDebug = true;
//debug.js
function debug(msg, level){
var Global = this;
if(!(Global.isDebug && Global.console && Global.console.log)){
return;
}
level = level||'info';
Global.console.log(level + ': '+ msg);
}
//main.js
debug('Here is a msg.');
Run Code Online (Sandbox Code Playgroud)
然后我在Firefox控制台中得到了这个结果.
info: Here is a msg. debug.js (line 8)
Run Code Online (Sandbox Code Playgroud)
如果我想用debug()被调用的行号记录,info: Here is a msg. main.js (line 2)怎么办?
我使用以下内容来获取JavaScript调用者函数名称:
var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")
Run Code Online (Sandbox Code Playgroud)
有没有办法发现调用该方法的行号?
另外,有没有办法获取调用该方法的JavaScript文件的名称?还是源URL?
是否可以使用一些javascript技巧来告诉console.log它应该输出哪个行号?
假设,我们通过以下简单示例:
function Logger () {
this.debug = function(msg) {
// do some stuff with msg
console.log(msg);
};
}
var log = new Logger();
log.debug("Hello");
Run Code Online (Sandbox Code Playgroud)
如果您打开该页面,Chrome会显示以下内容:
这表示消息已记录,main.js:4但我真正想要的是它显示的内容main.js:9.因为第9行是调用记录器的地方.对于这个简单的情况,它没有太大的区别,但是当Logger在一个单独的文件中时,它总是显示logger.js而不是调用记录器的类.
Logger类应该使用记录的消息做一些额外的事情(例如将其发送到服务器),因此我不能只使用this.debug = console.log.
编辑:
已经有一些类似的问题了,但是所有这些问题只是在输出中添加了一行,这是不可点击的,无法跳转到相应的行: