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