控制堆栈跟踪中的类名

时间:2014-05-19 09:21:40

标签: javascript firefox google-chrome-devtools

在javascript中定义类作为函数可以实现完美的堆栈跟踪:

name.space.MyClass = function() {};

name.space.MyClass.prototype.method = function() {
  console.trace();
};

(new name.space.MyClass()).trace();

输出类似的内容(在Chrome中):

name.space.MyClass.method
(anonymous function)

当您使用函数定义类时,如果有任何方法可以使用可读的堆栈跟踪,我就会徘徊:

registerComponent('my-component', {
  method: function() {}
});

显然,浏览器的行为可能会有所不同。

1 个答案:

答案 0 :(得分:1)

首先,从ECMAScript 5开始,JavaScript没有类的概念,但我理解你的意思。

为了获得良好的堆栈跟踪,您必须命名该函数:

registerComponent('my-component', {
  method: function myComponent$_method() {}
});

命名函数表达式可创建良好的堆栈跟踪。就个人而言,我现在仍然坚持new的堆栈跟踪,因为将(new与构造函数和命名函数表达式)结合起来,目前产生了JS中最好的堆栈跟踪。

请注意,此行为将来可能会有所改善。