构建两个最简单的 class,A
为 this
增加一个 'a'
属性, B
为 this
增加一个 'b'
属性, 值为 this.a + 1
, B
继承 A
但是 如果在构造函数存在函数体中访问了 this
的函数表达式, 则 在调试中 就取不到 this
的值了。
目前发现似乎只影响断点调试。
正常情况:
把函数表达式取消注释,会发现进入断点后 this
为 undefined
, 此时在控制台输入 console.log(this)
结果也是 undefined
两次运行的控制台输出相同, 都是正确的!!
ps: 一次运行有两个输出: 2
是代码中 console.log
的输出, undifined
是 代码片段的运行结果(立即执行函数的返回值)
代码:
(function(){
class A{
constructor(v) { this.a = v; }
}
class B extends A{
constructor(opt) {
super(opt);
debugger;
this.b = this.a + 1;
console.log(this.b);
() => this;
}
}
new B(1);
})();
这是 es6 的特性还是 浏览器的 bug 呢?有没有大佬之前了解这个问题的,能否帮忙分析分析,非常感谢!
补充
VSCode 错误
Edge 里 this
倒是有了, this.a
还是没有,
注释掉函数表达式 this.a
也没有,eval("debugger")
时访问不到 this
详情看这里:https://stackoverflow.com/a/2...
简单地说是因为v8的代码优化造成的结果。答案的下面的回复(https://stackoverflow.com/a/4...)也提到了一个绕过去这个问题的方法:使用
eval('debugger');
代替debugger