2016-07-08 11 views
12

देखें कैसे x और y निर्माता घोषित किये गए हैं:प्रचार ES6 वर्ग संपत्ति के बाहर समारोह

class Point { 
    constructor(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
    toString() { 
    return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

वहाँ उदाहरण के लिए कार्यों के बाहर गुण घोषित करने के लिए एक तरीका है:

class Point { 
    // Declare static class property here 
    // a: 22 
    constructor(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
    toString() { 
    return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

इसलिए मैं चाहता हूँ 22 को असाइन करें लेकिन मुझे यकीन नहीं है कि मैं इसे कन्स्ट्रक्टर के बाहर कर सकता हूं लेकिन अभी भी कक्षा के अंदर ..

+1

मैं आपको लगता है 'स्थिर प्राप्त x() {वापसी 5 का उपयोग कर सकते हैं; } ', जो एक ही चीज करने के लिए समाप्त होता है, बल्कि शब्दशः। – somethinghere

उत्तर

16

ईएस 6 में सीधे कक्षा में गुणों को शुरू करना not possible है, केवल मी वर्तमान में इस तरीके से घोषित किया जा सकता है। ईएस 7 में भी वही नियम खड़े हैं।

हालांकि, यह एक प्रस्तावित विशेषता है जो ES7 (वर्तमान में चरण 3 में) के बाद आ सकती है। यहां official proposal है।

साथ ही, वाक्य रचना प्रस्ताव का सुझाव दे रहा है slightly different (= बजाय :) है:

class Point { 
    // Declare class property 
    a = 22 
    // Declare class static property 
    static b = 33 
} 

आप कोलाहल का उपयोग कर रहे हैं, तो आप चरण इस सुविधा को सक्षम करने के लिए 3 सेटिंग्स का उपयोग कर सकते हैं।

Here's a Babel REPL example


निर्माता के अलावा अन्य ES6 में ऐसा करने के लिए, दूसरी तरह, वर्ग परिभाषा के बाद यह करने के लिए है:

class Point { 
    // ... 
} 

// Declare class property 
Point.prototype.a = 22; 

// Declare class static property 
Point.b = 33; 

यहाँ इस विषय में एक good SO Thread डाइविंग है कुछ और


नहीं ते:

Bergi टिप्पणी में उल्लेख किया है, सुझाव वाक्य रचना के रूप में:

class Point { 
    // Declare class property 
    a = 22 
} 

बस वाक्यात्मक चीनी इस कोड के लिए एक शॉर्टकट प्रदान करना है:

class Point { 
    constructor() { 
    this.a = 22; 
    } 
} 

कहाँ उन दोनों बयान उदाहरण पर एक संपत्ति असाइन करते हैं।

var point = new Point(); 
p.a // 22 
p.b // 33 

लेकिन हो रही b की आवश्यकता होगी ऊपर जा रहा:

class Point { 
    constructor() { 
    this.a = 22; // this becomes a property directly on the instance 
    } 
} 

Point.prototype.b = 33; // this becomes a property on the prototype 

दोनों अभी भी एक उदाहरण के माध्यम से उपलब्ध होगा:

हालांकि, इस प्रोटोटाइप को बताए के रूप में बिल्कुल वैसा ही नहीं है प्रोटोटाइप चेन जबकि a सीधे वस्तु पर उपलब्ध है।

enter image description here

+0

क्या आप अभी 'स्थिर प्राप्त x() {} 'का उपयोग नहीं कर सके? बस सोच रहा। असल में यह वही बात सही है? – somethinghere

+0

अच्छा, यह वास्तव में एक ही प्रभाव नहीं है लेकिन समान हो सकता है। आप निरंतर मूल्य प्राप्त करने के लिए 'get' का उपयोग कर सकते हैं या कन्स्ट्रक्टर में घोषित एक अन्य मान प्राप्त कर सकते हैं जो एक मान घोषित करने जैसा नहीं है जिसे सीधे – nem035

+1

हम्मम सत्य प्राप्त/सेट किया जा सकता है। आह ठीक है, भगवान का एकमात्र वाक्य रचनात्मक चीनी धन्यवाद और हम हमेशा जेएस की महान वस्तु विरासत पर भरोसा कर सकते हैं :) – somethinghere

1

@ nem035 सही है कि यह प्रस्ताव चरण में है।

हालांकि, @ nem035 का सुझाव क्लास इंस्टेंस सदस्य के रूप में इसे प्राप्त करने का एक तरीका है।

// स्थिर वर्ग संपत्ति घोषित करें यहाँ

लगता है आप एक स्थिर सदस्य घोषित करने के लिए देख रहे हैं। यदि हाँ, जावास्क्रिप्ट रास्ता

class Point { 
    // ... 
} 
Point.a = '22'; 

जिस तरह से आप वास्तव में उम्मीद कर रहे हैं टाइपप्रति

class Point { 
    static a = 22; 
} 

में किया जा सकता है संकलित उत्पादन उपरोक्त उदाहरण के रूप में ही किया जाएगा

Point.a = '22'; 
संबंधित मुद्दे