2016-02-06 12 views
5

Bir sınıfın yapıcısında const tanımladığım bir yolu var mı? tanımsızSınıf kurucusunda (ES6) bir const tanımla

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

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

Ama

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

döner:

Bu çalıştı.

+0

@Bergi İstediğime uzaktan bile benzemiyor. – alexandernst

+0

Peki [it] (http://stackoverflow.com/questions/13418669/javascript-do-i-need-to-put-this-var-for-every-variable-in-an-object) arasındaki farkı açıklar. Problemli göründüğünüz değişkenler ve özellikler. Kuşkusuz, size yazılabilir olmayan özellikleri nasıl tanımlayacağınızı söylemez. – Bergi

cevap

13

Bir sınıfa kapsamına eklenir sabit değerleri bildirme statik salt okunur özelliklerini kullanırlar.

class Foo { 
    static get BAR() { 
     return 42; 
    } 
} 

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

Aslında, '=>' orada olmamalıdır. – alexandernst

+0

@alexandernst teşekkürler. – cgTag

0

sorun "çubuk" kapsam ile - bu kurucusuna kapsamlı:

'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

Ah, anlıyorum. Bu şekilde yapılıyorsa, const'ın özellikleri korunur, değil mi? – alexandernst

+1

@alexandernst - no, 'this.bar' sabit olmayacak ve üzerine yazılabilir – adeneo

+1

O zaman bir sınıfta kullanılamazsa, 'const' noktasının anlamı nedir? – alexandernst

1

Basitçe örneğine iliştirin olmaz yapıcı bir sabit tanımlayan sen this kullanarak ayarlamak gerekir. Sana değişmezlik istiyorum tahmin ediyorum, bu yüzden getters kullanabilirsiniz:

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

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

Sonra senin gibi kullanabilirsiniz normalde olacaktır: bar değiştirmeye çalışırken

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

Bu bir hata atmaz. İsterseniz bir setterde bir hata ortaya çıkarabilir: