簡體   English   中英

ES6:靜態方法中的 this

[英]ES6: this within static method

假設我有兩個這樣的 ES6 類:

class Base {
    static something() {
        console.log(this);
    }
}

class Derived extends Base {
}

然后我打這樣的電話:

Derived.something();

請注意,我正在通過子類調用在超類上定義的靜態方法。

不會給我的錯誤。 它打印

[Function: Derived]

所以在靜態方法中訪問this似乎在這里工作。

我需要一個超類的所有子類的通用靜態方法,並且我需要能夠知道哪個子類正在調用這個方法。

現在我的問題是在靜態方法中使用this是否合法。 我知道這些靜態方法成為類方法,因此this自然會指向它們被調用的類對象。 (類對象是構造函數。)

但是我似乎找不到任何明確的資源表明 ES 規范允許這樣做。

看起來是對 ES6 類的一個很好的介紹,但沒有用static談論this

在典型的情況下,只要函數不是箭頭函數、綁定函數或類似的東西(在這種情況下它都不是something.method()任何something.method()調用中的this都會引用something

類繼承,甚至 ES6,在這里並不真正相關。 您只需要知道您正在調用Derived.something() ,因此this將引用Derived

是的, this在靜態方法中是合法的,應該這樣做。

this在原型方法中指類實例, 在靜態方法中指類構造函數,除非方法未從其原始上下文中綁定。

類似地, super在實例方法中指代父類原型, 在靜態方法中指代父類構造函數

只要靜態方法作為成員表達式被調用,例如

Derived.something();

const { something } = Derived;
something();

那么this將引用Derived Derived.something()something.call(Derived)相同,如果Derived.something存儲到一個中間變量,因為本質上這就是評估具有嵌套調用表達式的成員表達式的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM