我是一个懒惰的开发者...我喜欢制作快捷方式,所以我将console.info绑定到c
/*core_functions.js*/
/*==================================================
Bind C to be alert on mobile console.log in desktop
================================================== */
window.c = false;
if (typeof console === "object" && typeof console.error === "function" && !SP.isMobile) {
c = function (msg) {
console.info(msg);
};
} else {
c = function (msg) {
debug(msg);
};
}
/*somefile.js*/
c(anObject);
我一直在使用它已经有一段时间了,而且总是让我烦恼。它显示定义函数的文件,而不是调用函数的位置:
core_functions.js:40 Object {stadiumname: "Stadium 3", pitch: Object, lights: Object, seats: Object, scoreboards: Object…}
我可以参考调用函数的位置吗?还是我永远陷入这种轻微的烦恼?
答案 0 :(得分:2)
您看到的是该行号,因为它确实在调用console.info
的位置。我可以想到避免这种情况的方法是调用真正的console
方法,而不是用中间函数代理。
在我看来,您希望有一个抽象层来使用本机控制台或自定义控制台来处理您的日志记录。
在这种情况下,您可以尝试这样的事情:
var c = (typeof console === 'object') ? console : alternative;
然后将其用作:
c.log('Hello World');
这样你的替代对象可以是你正在考虑使用的方法,例如:
var alternative = {
log: function() {
window.alert.apply(window, arguments);
}
};
这样您就无法获得c()
功能,但我认为您最终会获得更灵活的解决方案。通过公开console
所具有的相同界面,您甚至可以将这些日志记录工具添加到应用程序中运行的任何代码(即使用本机console
的第三方代码)
window.console = (typeof window.console === 'object') ? window.console : alternative
或者如果你那天感到非常懒惰:)
window.console = window.console || alternative
这根本不是完美的技术,但如果你只是在开发它的时候使用它可能会有所帮助。
此外,我从未真正参与Stack Overflow,所以如果我无视任何规则或礼仪,我会非常抱歉:)
答案 1 :(得分:0)
我使用以下内容进行回溯,你可以用它做点什么。
arguments.callee.caller.toString()