3 回答

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

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