有没有办法在类的构造函数中定义const
?
我试过了:
class Foo {
constructor () {
const bar = 42;
}
getBar = () => {
return this.bar;
}
}
但是
var a = new Foo();
console.log ( a.getBar() );
返回undefined。
答案 0 :(得分:17)
使用静态只读属性来声明作用于类的常量值。
class Foo {
static get BAR() {
return 42;
}
}
console.log(Foo.BAR); // print 42.
Foo.BAR = 43; // triggers an error
答案 1 :(得分:2)
只需在构造函数中定义常量不会将其附加到实例,您必须使用this
进行设置。我猜你想要不变性,所以你可以使用getters:
class Foo {
constructor () {
this._bar = 42;
}
get bar() {
return this._bar;
}
}
然后你可以像往常一样使用它:
const foo = new Foo();
console.log(foo.bar) // 42
foo.bar = 15;
console.log(foo.bar) // still 42
尝试更改bar
时不会抛出错误。如果您愿意,可以在setter中引发错误:
class Foo {
constructor () {
this._bar = 42;
}
get bar() {
return this._bar;
}
set bar(value) {
throw new Error('bar is immutable.');
}
}
答案 2 :(得分:0)
问题在于“bar”范围 - 它的范围是构造函数:
'use strict';
class Foo {
constructor () {
const bar = 42;
this.bar = bar; // scoping to the class
}
getBar () {
return this.bar;
}
}
var a = new Foo();
console.log ( a.getBar() );