在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ 神奇的問(wèn)題,子類構(gòu)造函數(shù)中若存在訪問(wèn)this的函數(shù)表達(dá)式,則其中 this 在調(diào)

神奇的問(wèn)題,子類構(gòu)造函數(shù)中若存在訪問(wèn)this的函數(shù)表達(dá)式,則其中 this 在調(diào)試時(shí)始終為 undefind

構(gòu)建兩個(gè)最簡(jiǎn)單的 class,
Athis 增加一個(gè) 'a' 屬性,
Bthis 增加一個(gè) 'b' 屬性, 值為 this.a + 1, B 繼承 A

但是 如果在構(gòu)造函數(shù)存在函數(shù)體中訪問(wèn)了 this 的函數(shù)表達(dá)式, 則 在調(diào)試中 就取不到 this 的值了。
目前發(fā)現(xiàn)似乎只影響斷點(diǎn)調(diào)試。

正常情況:
圖片描述

把函數(shù)表達(dá)式取消注釋,會(huì)發(fā)現(xiàn)進(jìn)入斷點(diǎn)后 thisundefined, 此時(shí)在控制臺(tái)輸入 console.log(this) 結(jié)果也是 undefined
圖片描述

兩次運(yùn)行的控制臺(tái)輸出相同, 都是正確的?。?br>ps: 一次運(yùn)行有兩個(gè)輸出: 2 是代碼中 console.log 的輸出, undifined 是 代碼片段的運(yùn)行結(jié)果(立即執(zhí)行函數(shù)的返回值)
圖片描述

代碼:

(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 呢?有沒(méi)有大佬之前了解這個(gè)問(wèn)題的,能否幫忙分析分析,非常感謝!

補(bǔ)充

VSCode 錯(cuò)誤
clipboard.png

Edge 里 this 倒是有了, this.a 還是沒(méi)有,
注釋掉函數(shù)表達(dá)式 this.a 也沒(méi)有,
eval("debugger") 時(shí)訪問(wèn)不到 this
clipboard.png

回答
編輯回答
無(wú)標(biāo)題

詳情看這里:https://stackoverflow.com/a/2...
簡(jiǎn)單地說(shuō)是因?yàn)関8的代碼優(yōu)化造成的結(jié)果。答案的下面的回復(fù)(https://stackoverflow.com/a/4...)也提到了一個(gè)繞過(guò)去這個(gè)問(wèn)題的方法:使用eval('debugger');代替debugger

2017年8月5日 04:34