2016-02-06 8 views
5

में एक कॉन्स परिभाषित करें क्या कोई तरीका है कि मैं कक्षा के निर्माता में const परिभाषित कर सकता हूं?कक्षा कन्स्ट्रक्टर (ES6)

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

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

लेकिन

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

रिटर्न अपरिभाषित:

मैं इस कोशिश की।

+0

@ बरगी मैं जो भी पूछ रहा हूं उससे भी दूरस्थ रूप से समान नहीं हूं। – alexandernst

+0

वैसे [यह] (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

समस्या "बार" scoping के साथ है - यह निर्माता के दायरे वाला:

'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 - नहीं, 'this.bar' स्थिर नहीं रहेगा, और इसे – adeneo

+1

ओवरराइट किया जा सकता है, फिर किसी भी वर्ग में इसका उपयोग नहीं किया जा सकता है, तो' const' का बिंदु क्या है? – alexandernst

1

सीधे शब्दों में निर्माता में एक निरंतर उदाहरण के लिए देते नहीं होगा परिभाषित करने के लिए, आप 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 बदलने के लिए प्रयास में कोई त्रुटि फेंक नहीं होंगे। यदि आप चाहें तो आप एक सेटर में एक त्रुटि बढ़ा सकते हैं:

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

    get bar() { 
     return this._bar; 
    } 

    set bar(value) { 
     throw new Error('bar is immutable.'); 
    } 
} 
संबंधित मुद्दे