2017-01-07 6 views
6

ईएस 6 कक्षा परिभाषा में वास्तव में गेटर और सेटर विधियां क्या हैं? क्या वे वास्तव में प्रोटोटाइप प्रोप हैं? examle के लिए:ईएस 6 क्लास गेटर और सेटर वास्तव में क्या हैं?

class Person{ 
    constructor(){}; 
    get name(){ 
    return 'jack'; 
    } 
    set name(){ 
    // ??? 
    } 
} 

इस = 'जैक' Person.prototype.name के बराबर है;

और एक और सवाल, मैं setters जो की तरह उदाहरण के प्रोप इस्तेमाल की देखा उदाहरण ve:

class Person{ 
    constructor(){ 
    this._name = 'jack'; 
    }; 
    get name(){ 
    return this._name; 
    } 
    set name(val){ 
    this._name = val; 
    } 
} 

मुझे नहीं करना चाहते हैं इस तरह से करते हैं, मैं चाहता हूँ की तरह कुछ:

class Person{ 
    constructor(){}; 
    get name(){ 
    return 'jack'; 
    } 
    set name(val){ 
    // like this 
    // name = val; 
    } 
} 

क्या हो सकता है किया हुआ?

+0

https: //developer.mozilla। संगठन/एन-यूएस/डॉक्स/वेब/जावास्क्रिप्ट/संदर्भ/कार्य/प्राप्त करें और https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set –

+0

'name' में क्या है आपके अंतिम उदाहरण में 'name = val'? मुझे समझ में नहीं आता क्या आप समझ सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं? –

+0

संभावित डुप्लिकेट [ईसीएमएस्क्रिप्ट 6 कक्षाओं में गेटर्स और सेटर्स क्या हैं?] (Https://stackoverflow.com/questions/28222276/what-are-getters-and-setters-for-in-ecmascript-6-classes) – Drenmi

उत्तर

9

हाँ, यह किया जा सकता है: बस सेटर/गेटर वाक्य रचना ड्रॉप और बदले आरंभीकरण के दौरान कक्षा में कोई प्रॉपर्टी जोड़ते:

class Person{ 
    constructor(name){ 
     this.name = name; 
    } 
} 

गेटर/सेटर वाक्य रचना गुण है कि गणना के आधार पर किया जाना चाहिए के लिए मौजूद है अन्य संपत्तियों, किसी दिए गए radius का एक चक्र से area संपत्ति की तरह:

class Circle { 
    constructor (radius) { 
     this.radius = radius; 
    } 
    get area() { 
     return Math.PI * this.radius * this.radius; 
    } 
    set area (n) { 
     this.radius = Math.sqrt(n/Math.PI); 
    } 
} 

या firstName औरके साथ एक Person वस्तु का पूरा नाम हो रही है 10 गुण तुम्हें नया तरीका मिल गया है।

+0

हम जानते हैं कि वर्ग प्रोटोटाइप के लिए प्रोटोटाइप के लिए एक शॉर्टेंड है, हम ऑब्जेक्ट को तत्काल बना सकते हैं। हालांकि, मैं चाहता हूं कि कक्षा परिभाषा के भीतर अपने प्रोटोटाइप में प्रोप को परिभाषित करना है लेकिन कन्स्ट्रक्टर विधि के बाहर। – feiyuerenhai

+0

उदाहरण की अपनी संपत्ति का उपयोग किये बिना – feiyuerenhai

+1

क्षेत्र सेटर 'this.radius = Math.sqrt (n/Math.PI) होना चाहिए;' – alphakevin

2

एमडीएन के अनुसार, सिंटैक्स एक ऑब्जेक्ट प्रॉपर्टी को उस फ़ंक्शन पर बांधता है जिसे उस संपत्ति को देखा जाने पर बुलाया जाएगा।

यहां आप केवल एक स्ट्रिंग 'जैक' लौट रहे हैं, यह किसी भी संपत्ति के लिए बाध्यकारी नहीं है।

दिलचस्प बात यह है console.log (Person.prototype.name) लॉग जैक

लेकिन Person.hasOwnProperty (नाम) लॉग झूठी

भी एक बार हम व्यक्ति के कहने बनाने फोन यानी स्थिरांक एक्स = नए व्यक्ति() ;

console.log (x.name) -> इस त्रुटि फेंकता है, नहीं कर सकते संपत्ति x.name पढ़ा क्योंकि x.hasOwnProperty (नाम) गलत है

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

संबंधित मुद्दे