javascript - 有没有办法在javascript中动态查看调用堆栈?

标签 javascript html

一个一般性问题,但有问题的代码是这样的:

有一个抛出错误的例程 - 处理异常:

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/

相关文章:

javascript - 谷歌文档脚本

html - 如何根据我所在的 URL/网站和/或服务器自动选择要使用的 css?

python - 将 HTML 实体转换为 Python 表情符号

javascript - 如何覆盖 window.open 功能?

javascript - 忽略 "enter"键并在文本输入中将焦点移动到 5 个字符后

javascript - Ajax错误类型错误: data is undefined

javascript - 无法从 HTML 输入元素 ASP.NET 读取 JSON 数据

javascript - Javascript中有重复声明优化吗?

html - Wordpress 重力 PDF CSS 专栏

html - 带图像的页脚将所有文本保留在图像右侧