मेरे पास यह वर्ग संरचना है:

class Component{
    constructor(name){
        this.__name = name;
    }

    static getName() { return this.__name; }
}   

class ComponentChild extends Component{
    constructor(){
        super("myName");
    }
}

जब मैं फोन करता हूँ

console.log(ComponentChild.getName);

मुझे उम्मीद है myName

इसके बजाय मुझे undefined मिलता है।

कोई सहायता चाहिए? धन्यवाद!!

0
Alberto Valero 16 मई 2018, 17:05

2 जवाब

सबसे बढ़िया उत्तर

ओओपी में स्थिर गुण और कार्य उस वर्ग से संबंधित होते हैं जिसमें उन्हें घोषित किया जाता है, इसलिए उनके पास उदाहरण गुणों या कार्यों तक पहुंच नहीं होती है, इसलिए आपको उस फ़ंक्शन को गैर-स्थैतिक बनाने की आवश्यकता होगी।

getName() { return this.__name; }

आगे की व्याख्या

आपको यह ध्यान रखना चाहिए कि JS एक वर्ग-आधारित नहीं है, बल्कि एक प्रोटोटाइप-आधारित OOP भाषा है, ES6 द्वारा "स्थिर" फ़ंक्शन को कंस्ट्रक्टर फ़ंक्शन की संपत्ति के रूप में घोषित करने से पहले:

function Component(name) {
     // ctor logic
}

Component.getName = function(){ 
     // fn logic 
}

तो एक "स्थिर" फ़ंक्शन के अंदर आपका यह कंस्ट्रक्टर फ़ंक्शन है।

अपडेट करें

यदि आप जरूरी एक स्थिर विधि का उपयोग करते हैं तो आप एक एक्सेसर फ़ंक्शन लिख सकते हैं जैसे

class Component {
    static getName(instance) {
        return instance._name;
    }
}

और फिर इसे के रूप में उपयोग करें

console.log(Component.getName(instance));
3
J. Pichardo 16 मई 2018, 17:21

किसी इंस्टेंस को संदर्भित करने के लिए आप एक स्थिर फ़ंक्शन में this का उपयोग नहीं कर सकते। स्थैतिक कार्य स्थिर होते हैं क्योंकि आप उन्हें कक्षा में ही बुलाते हैं, उदाहरण के लिए नहीं; इस प्रकार, उनके पास इंस्टेंस सदस्यों तक पहुंच नहीं है।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static

1
Máté Safranka 16 मई 2018, 17:08