跳到主要内容

静态

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