在類方法中,this
的值取決于方法的調用方式。當使用普通函數調用類方法時,this
會指向調用該方法的對象。但是,當使用箭頭函數調用類方法時,this
會繼承自外部作用域,并且不會被綁定到類的實例上。這是因為箭頭函數沒有自己的上下文,它繼承了其父級上下文的this
值。
在使用Promises時,如果你將類方法作為回調函數傳遞給Promise的then
方法時,它會被作為普通函數調用,而不是作為方法調用。因此,this
會指向全局對象(在瀏覽器環境中通常是window
對象)或者undefined
(在嚴格模式下)。
為了在類方法中正確使用this
,可以使用箭頭函數來定義類方法。這樣,this
會繼承自外部作用域,并且會正確地指向類的實例。例如:
class MyClass {
myMethod() {
return new Promise((resolve, reject) => {
// 在這里可以正常訪問this
resolve(this.someData);
});
}
}
在使用箭頭函數定義類方法時,需要注意以下幾點:
箭頭函數不能用作構造函數,因此不能使用new
關鍵字創建類的實例。
箭頭函數沒有自己的arguments
對象,也不能使用super
關鍵字來訪問父類的方法。
箭頭函數不能改變自己的this
值,即使使用call
、apply
或bind
方法也不行。