神奇的问题,子类构造函数中若存在访问this的函数表达式,则其中 this 在调试时始终为 undefind

构建两个最简单的 class,
Athis 增加一个 'a' 属性,
Bthis 增加一个 'b' 属性, 值为 this.a + 1, B 继承 A

但是 如果在构造函数存在函数体中访问了 this 的函数表达式, 则 在调试中 就取不到 this 的值了。
目前发现似乎只影响断点调试。

正常情况:
图片描述

把函数表达式取消注释,会发现进入断点后 thisundefined, 此时在控制台输入 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 错误
clipboard.png

Edge 里 this 倒是有了, this.a 还是没有,
注释掉函数表达式 this.a 也没有,
eval("debugger") 时访问不到 this
clipboard.png

阅读 2k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题