作者:babelbat_786 | 来源:互联网 | 2022-12-10 13:50
我正在尝试在es6中使用静态变量.我想count
在Animal
类中声明一个静态变量并增加它.但是,我无法通过声明静态变量static count = 0;
,所以我尝试了另外一种方式:
class Animal {
constructor() {
this.count = 0;
}
static increaseCount() {
this.count += 1;
}
static getCount() {
return this.count;
}
}
console.log(Animal.increaseCount()); // undefined
console.log(Animal.getCount()); // NaN
我希望console.log(Animal.getCount());
如此1
,但它不起作用.如何通过调用方法声明静态变量并对其进行修改?
1> T.J. Crowder..:
您的类没有静态变量(如果静态变量,则表示静态属性).getCount
返回NaN
(在你调用之后increaseCount
)因为最初Animal
没有count
属性.那increaseCount
是做undefined + 1
什么的NaN
.最初创建的实例最初new Animal
具有count
属性,但Animal
直到您调用才会生成increaseCount
.this
在一个static
方法中引用Animal
类(构造函数)本身(如果你通过它调用它Animal.methodName(...)
).
你可以给Animal
一个count
房产:
Animal.count = 0;
实例:
class Animal {
constructor() {
}
static increaseCount() {
this.count += 1;
}
static getCount() {
return this.count;
}
}
Animal.count = 0;
Animal.increaseCount();
console.log(Animal.getCount());
Animal.increaseCount();
console.log(Animal.getCount());
2> Estus Flask..:
如其他答案中所述,this.count
是指中的实例属性constructor
。为了初始化静态属性,Animal.count
应进行设置。
类字段建议提供Animal.count = 0
了编译器可以使用的语法糖(Babel等):
class Animal {
static count = 0;
...
}
ES6中的一种替代方法是使用初始值,在这种情况下,Animal.count
不需要显式设置初始值,例如:
class Animal {
static increaseCount() {
this.count = this.getCount() + 1;
}
static getCount() {
return this.count || 0;
}
}
Javascript类中不欢迎访问器方法-这是getter / setter描述符的用途:
class Animal {
static increaseCount() {
this._count += 1;
}
static get count() {
return this._count || 0;
}
static set count(v) {
this._count = v;
}
}
纯静态类在Javascript中被视为反模式,因为未使用特定于类的状态或其他特征。如果只有一个实例,则应使用普通对象(除非还有其他可从中受益的问题class
):
const animal = {
increaseCount() {
this._count += 1;
},
get count() {
return this._count || 0;
},
set count(v) {
this._count = v;
}
};