2016-02-06 11 views
5

クラスのコンストラクタにconstを定義する方法はありますか?未定義クラスコンストラクタ(ES6)でconstを定義する

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

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

しかし

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

リターン:

は、私はこれを試してみました。

+0

@Bergi @Bergi私が求めているものに遠く離れていません。 – alexandernst

+0

Well [it](http://stackoverflow.com/questions/13418669/javascript-do-i-need-to-put-this-var-for-every-variable-in-an-object)変数とプロパティーに問題があるようです。確かに、書き込み不可能なプロパティを定義する方法を教えてくれるわけではありません。 – Bergi

答えて

13

あなたはクラスのスコープに配置され、一定の値を宣言するために、静的な読み取り専用のプロパティを使用します。

単にコンストラクタで定数を定義
class Foo { 
    static get BAR() { 
     return 42; 
    } 
} 

console.log(Foo.BAR); // print 42. 
Foo.BAR = 43; // triggers an error 
+1

実際には、 '=>'はそこにあってはなりません。 – alexandernst

+0

@alexandernstありがとう。 – cgTag

0

問題は「バー」スコープである - それは、コンストラクタにスコープ:

'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()); 
+0

ああ、そうです。このようにして、 'const'のプロパティは維持されます。 – alexandernst

+1

@alexandernst - それはクラスで使用することができない場合は、no、 'this.bar'は一定ではないだろう、と – adeneo

+1

を上書きすることができますがその後全く' const'のポイントは何ですか? – alexandernst

1

は、インスタンスにアタッチしません、あなたはthisを使用して設定する必要があります。

class Foo { 
    constructor() { 
     this._bar = 42; 
    } 

    get bar() { 
     return this._bar; 
    } 
} 

通常どおりのように、あなたがそれを使用することができます::barを変更しようとしたとき

const foo = new Foo(); 
console.log(foo.bar) // 42 
foo.bar = 15; 
console.log(foo.bar) // still 42 

これはエラーをスローしません。あなたがgettersを使用することができますので、私は、あなたが不変をしたい推測しています。あなたが望むなら、セッターでエラーを起こす可能性があります:

class Foo { 
    constructor() { 
     this._bar = 42; 
    } 

    get bar() { 
     return this._bar; 
    } 

    set bar(value) { 
     throw new Error('bar is immutable.'); 
    } 
} 
関連する問題