[英]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.