3 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于您在對象內(nèi)使用箭頭函數(shù),因此this變?yōu)閣indow,而不是Obj。但是在類中,run 函數(shù)在構(gòu)造函數(shù)內(nèi)部,this生成對象,而不是window. 如果您希望對象打印對象 x,則需要使用Obj.x.
var Obj = {
x:30 ,
run : () => {
console.log(Obj.x);
}
}
即使兩個(gè)對象在同一個(gè)作用域中,它們也不是在同一個(gè)作用域中創(chuàng)建的,它們的創(chuàng)建方式也不同。類是構(gòu)造函數(shù),對象不是。
如果您確實(shí)想使用this關(guān)鍵字,那么run : () =>您可以簡單地將其替換為run ()。然后你可以使用this.x代替Obj.x。它有點(diǎn)像在類中(在其構(gòu)造函數(shù)之外)定義一個(gè)函數(shù)。
var Obj = {
x:30 ,
run () {
console.log(this.x);
}
}

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
假設(shè)這是在瀏覽器中,當(dāng)你說var x = 10; // global var
全局對象是瀏覽器的window
,所以你說window.x = 10;
然后創(chuàng)建你的“目標(biāo)文件”,并指定其X,x:30
但你仍然在全球范圍內(nèi),所以在那里當(dāng)“運(yùn)行”運(yùn)行,this
還是指window
和window.x
為10。
當(dāng)您擁有myClass
并構(gòu)造其中之一newObj
時(shí),此時(shí)this
現(xiàn)在指的是構(gòu)造的對象,因此this.x
指的是類成員x
,即 30。
在控制臺中查看時(shí),它們可能看起來相同,但這是因?yàn)榭刂婆_兩次都在同一范圍內(nèi)工作。嘗試在您所做的每一行上放置一個(gè)斷點(diǎn),console.log
并檢查您遇到斷點(diǎn)時(shí)的this
和的值。this.x
添加回答
舉報(bào)