假设我有两个es6课程,如下所示:
class Base {
static something() {
console.log(this);
}
}
class Derived extends Base {
}
然后我打了一个这样的电话:
Derived.something();
请注意,我正在通过子类调用在超类上定义的静态方法。
这不会给我错误。它打印
[Function: Derived]
所以访问 this
在这里,静态方法似乎是可行的。
我需要一个超类的所有子类的通用静态方法,并且我需要能够知道哪个子类调用这个方法。
现在我的问题是是否使用 this
在一个静态方法中是合法的。我知道这些静态方法会变成类方法,因此 this
自然会指向调用它们的类对象(作为构造函数的类对象。)
但我似乎找不到任何明确的资源表明es规范允许这样做。
这看起来像是es6课程的一个很好的介绍,但并没有讨论 this
具有 static
.
3条答案
按热度按时间sycxhyv71#
在典型情况下
this
打电话给something.method()
将参考something
只要函数不是箭头函数、绑定函数或类似的函数(在本例中两者都不是)。类继承,甚至es6,在这里并不真正相关。你只需要知道你在打电话
Derived.something()
所以this
将参考Derived
.eiee3dmh2#
对
this
在静态方法中是合法的,应该这样做。this
在原型方法中引用类示例,在静态方法中引用类构造函数,除非方法从其原始上下文中解除绑定。同样地,
super
引用示例方法中的父类原型,引用静态方法中的父类构造函数。f8rj6qna3#
只要静态方法作为成员表达式调用,例如。
相对于
然后
this
将参考Derived
.Derived.something()
与相同something.call(Derived)
如果Derived.something
存储到中间变量,因为从本质上讲,具有嵌套调用表达式的成员表达式就是这样计算的。