es6:这是在静态方法中实现的

ruoxqz4g  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(305)

假设我有两个es6课程,如下所示:

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

class Derived extends Base {
}

然后我打了一个这样的电话:

Derived.something();

请注意,我正在通过子类调用在超类上定义的静态方法。
这不会给我错误。它打印

[Function: Derived]

所以访问 this 在这里,静态方法似乎是可行的。
我需要一个超类的所有子类的通用静态方法,并且我需要能够知道哪个子类调用这个方法。
现在我的问题是是否使用 this 在一个静态方法中是合法的。我知道这些静态方法会变成类方法,因此 this 自然会指向调用它们的类对象(作为构造函数的类对象。)
但我似乎找不到任何明确的资源表明es规范允许这样做。
这看起来像是es6课程的一个很好的介绍,但并没有讨论 this 具有 static .

sycxhyv7

sycxhyv71#

在典型情况下 this 打电话给 something.method() 将参考 something 只要函数不是箭头函数、绑定函数或类似的函数(在本例中两者都不是)。
类继承,甚至es6,在这里并不真正相关。你只需要知道你在打电话 Derived.something() 所以 this 将参考 Derived .

eiee3dmh

eiee3dmh2#

this 在静态方法中是合法的,应该这样做。 this 在原型方法中引用类示例,在静态方法中引用类构造函数,除非方法从其原始上下文中解除绑定。
同样地, super 引用示例方法中的父类原型,引用静态方法中的父类构造函数。

f8rj6qna

f8rj6qna3#

只要静态方法作为成员表达式调用,例如。

Derived.something();

相对于

const { something } = Derived;
something();

然后 this 将参考 Derived . Derived.something() 与相同 something.call(Derived) 如果 Derived.something 存储到中间变量,因为从本质上讲,具有嵌套调用表达式的成员表达式就是这样计算的。

相关问题