一个一般性问题,但有问题的代码是这样的:
有一个抛出错误的例程 - 处理异常:
MyObj.prototype.err = function( msg ) { ... throw(msg); }
所以扔,
if( mybad ) this.err( 'my message' );
希望 err() 根据函数是否在调用堆栈中而表现不同。
例如,可能是
funcA() -> func2() -> func3() -> err()
对比
funcB() -> func3() -> err()
如果 funcA 位于上游,希望提醒用户并停止;而如果 funcB,想将消息写入控制台并继续。
实现解决问题的其他方法,但恕我直言,创建(和维护)可以从环境中推断出的状态空间是运气不好
最佳答案
我不确定您要解决什么问题,但我很确定有比这更好的方法。
话虽这么说,这是跟踪函数和检查调用堆栈的一种方法,而无需解析特定于浏览器的堆栈跟踪:
var callstack = [];
function traced(name, func) {
return function () {
callstack.push(name);
func.apply(this, arguments);
callstack.pop();
}
}
并像这样使用它:
var a = traced("a", function () {
b();
});
var b = traced("b", function () {
c();
});
var c = traced("c", function () {
var s = callstack.join("<br>");
document.getElementById('output').innerHTML = s;
});
document.getElementById('a').onclick = a;
document.getElementById('b').onclick = b;
您可以在此处查看 fiddle :http://jsfiddle.net/AsrSp/
关于javascript - 有没有办法在javascript中动态查看调用堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288964/