ES6:这在静态方法中

tre*_*der 3 javascript static-methods this-pointer ecmascript-6 es6-class

假设我有两个这样的ES6类:

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

class Derived extends Base {
}
Run Code Online (Sandbox Code Playgroud)

然后我打个电话:

Derived.something();
Run Code Online (Sandbox Code Playgroud)

请注意,我正在通过子类调用超类上定义的静态方法.

这并没有给我的错误.它打印

[Function: Derived]
Run Code Online (Sandbox Code Playgroud)

因此,this在静态方法中访问似乎在这里工作.

我需要一个超级类的所有子类的公共静态方法,我需要能够知道什么子类正在调用此方法.

现在我的问题是this在静态方法中使用是否合法.我知道这些静态方法成为类方法,因此this自然会指向它们被调用的类对象.(类对象是构造函数.)

但我似乎无法找到任何明确的资源,表明ES规范允许这样做.

看起来像一个很好的介绍ES6类,但没有谈及thisstatic.

JLR*_*she 6

在典型的情况下,只要函数不是箭头函数,绑定函数或类似的东西,this任何调用中something.method()都会引用something(在这种情况下它既不是那些).

类继承,甚至是ES6,在这里并不重要.你需要知道的就是你在打电话Derived.something(),所以this请参考Derived.


Est*_*ask 6

是的,this在静态方法中是合法的,应该这样做。

this在原型方法中指类实例,在静态方法中指类构造函数,除非方法未从其原始上下文中绑定。

同理,super实例方法中指父类原型,静态方法中指父类构造函数