静态
2023年06月15日
一、认识
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法或者属性前,加上 static
关键字,就表示该方法不会被实例继承,而是直接通过类来使用或者访问,这就称为静态。
二、语法
class Point {
static x;
static y;
static toString() {
return `(${this.x},${this.y})`;
}
}
Point.x = 10;
Point.y = 10;
Point.toString();
也可以写成
class Point {
}
Point.x;
Point.y;
Point.toString = ()=>{
}
Point.x = 10;
Point.y = 10;
Point.toString();
三、细节
3.1 this
静态方法 中的 this
指向 class
自身, 而不是 class
的实例。
class Point {
static x;
static y;
static toString() {
return `(${this.x},${this.y})`;
}
toString(){
……
}
}
Point.x = 10;
Point.y = 10;
Point.toString();
3.2 重名
静态方法 可以与 实例方法 重名
class Point {
static x;
static y;
static toString() {
return `(${this.x},${this.y})`;
}
toString(){
……
}
}
Point.x = 10;
Point.y = 10;
Point.toString();
3.3 继承
父类的静态属性或方法,可以被子类继承。
class Foo {
static classMethod() {
return 'hello';
}
}
class Bar extends Foo {
}
Bar.classMethod() // 'hello'
3.4 实例调用
如果在实例上访问静态属性或者方法,会抛出一个错误,表示不存在该方法。
class Foo {
static classMethod() {
return 'hello';
}
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function