有几种快速处理的选项。
1 - 使用console.error
不太方便,实际错误会被忽略,并且在控制台输出中看到大量红色可能会对您的士气产生负面影响。简而言之——除非是用于非常小的脚本或某些测试,否则不要使用。
2 - 将您的日志方法添加到对象的原型中
以获取当前作用域/模块名称/等等。更加灵活和优雅。
Object.prototype.log = function(message){
console.log({
'message': message,
'caller': this,
'stack':arguments.callee.caller.toString()
});
};
使用 (任何地方) 如下:
this.log("foo");
您可以将this线程中的技术添加到您的对象中,以获取精确的函数名称,如下所示:
var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 9, callerFunc.indexOf("(")) || "anoynmous");
但请确保您的作用域已命名... 这将迫使您从以下内容开始:
Module.method = function(){}
变为这样:
Module.method = function method(){}
关于行号,调用 (new Error()) 将使您可以访问调用它的行号——并且并非在所有浏览器中都是如此。
创建一个优雅的调试函数需要一些工作。
尽管我不愿承认,但另一个答案暗示使用正则表达式来处理 try 结果似乎是解决您问题的更快方法。
function myFunction() { var error = new Error(); console.log(error.stack); } myFunction();
输出结果类似于:Error at myFunction (http://localhost/example.js:4:9) at window.onload (http://localhost/example.js:8:1)
这表明myFunction函数被调用时,在本地主机上的example.js文件的第4行和第9个字符处发生了错误。它还显示了在window.onload事件处理程序中调用myFunction函数的情况,该事件处理程序位于example.js文件的第8行和第1个字符处。 - nice ass