在类构造函数中定义一个const(ES6)

时间:2016-02-06 14:24:48

标签: javascript ecmascript-6

有没有办法在类的构造函数中定义const

我试过了:

class Foo {
    constructor () {
        const bar = 42;
    }

    getBar = () => {
        return this.bar;
    }
}

但是

var a = new Foo();
console.log ( a.getBar() );

返回undefined。

3 个答案:

答案 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() );