static与new.target关键字
static
static 在类中定义静态方法。
什么时候能用
看方法里,有没用到this,没用到就可以考虑用静态方法。静态方法通常用于创建实用程序函数,例如,创建或克隆对象。
什么时候不能用
不能在类的实例上调用。
怎么调用
以下几种情况都可调用:
静态方法调用直接在类上进行。
静态方法调用同一个类中的其他静态方法,可使用
this
关键字1
2
3
4
5
6
7
8
9
10
11
12
13class StaticMethodCall {
static staticMethod() {
return 'Static method has been called';
}
static anotherStaticMethod() {
return this.staticMethod() + ' from another static method';
}
}
StaticMethodCall.staticMethod();
// 'Static method has been called'
StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'非静态方法中,不能直接使用
this
关键字来访问静态方法。而是要用类名来调用:CLASSNAME.STATIC_METHOD_NAME()
,或者用构造函数的属性来调用该方法:this.constructor.STATIC_METHOD_NAME()
.1
2
3
4
5
6
7
8
9
10
11class StaticMethodCall {
constructor() {
console.log(StaticMethodCall.staticMethod());
// 'static method has been called.'
console.log(this.constructor.staticMethod());
// 'static method has been called.'
}
static staticMethod() {
return 'static method has been called.';
}
}
new.target
**new.target
**属性允许检测函数或构造方法是否是通过new运算符被调用的。在普通函数(没有被 new 的函数)调用中,new.target
的值是undefined
注意,在类的构造方法中,new.target
指向直接被new
执行的构造函数。
1 | class A { |