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类,但没有谈及this
与static
.
在典型的情况下,只要函数不是箭头函数,绑定函数或类似的东西,this
在任何调用中something.method()
都会引用something
(在这种情况下它既不是那些).
类继承,甚至是ES6,在这里并不重要.你需要知道的就是你在打电话Derived.something()
,所以this
请参考Derived
.
是的,this
在静态方法中是合法的,应该这样做。
this
在原型方法中指类实例,在静态方法中指类构造函数,除非方法未从其原始上下文中绑定。
同理,super
实例方法中指父类原型,静态方法中指父类构造函数。