2015-04-03 21 views
15

ईएस 6 सिंटैक्स का उपयोग करना स्थाई विधियों को एक वर्ग का विस्तार करना और इसकी स्थिर विधियों का उत्तराधिकारी बनाना संभव है? और यदि हां, तो क्या हम सबक्लास की स्थैतिक विधि में सुपर कॉल कर सकते हैं?ईएस 6

उदाहरण:

class Parent { 
    static myMethod(msg) { 
    console.log(msg) 
    } 
} 

class Child extends Parent { 
    static myMethod() { 
    super("hello") 
    } 
} 

Child.myMethod(); // logs "hello" 

यह मुझे मेरे transpiler (Reactify) में अपरिभाषित त्रुटि पर एक कोई विधि कॉल दे रहा है।

____SuperProtoOfParent.open.call(this);

+2

ध्यान दें कि यह 'super' बाहर कंस्ट्रक्टर्स कॉल करने के लिए गैर कानूनी है। आप यहां 'super.myMethod()' चाहते हैं, लेकिन मुझे नहीं पता कि 'सुपर' को स्थिर तरीकों से काम करना है या नहीं। –

+2

दिलचस्प सवाल है, लेकिन इसे ओओपी बिंदु दृश्य से देखते हुए आपको 'parent.myMethod()' को कॉल नहीं करना चाहिए क्योंकि 'स्थिर' का कोई उदाहरण नहीं है? – CodingIntrigue

उत्तर

18
वर्तमान this वस्तु के प्रोटोटाइप को spec here और here super आधार संदर्भ के अनुसार

। स्थिर तरीकों से यह विरासत वर्ग के संदर्भ में होगा। तो पैरेंट स्थिर विधि का आह्वान करने के लिए आपको super.myMethod('some message') पर कॉल करना होगा। यहाँ एक उदाहरण है:

class Parent { 
    static myMethod(msg) { 
    console.log('static', msg); 
    } 

    myMethod(msg) { 
    console.log('instance', msg); 
    } 
} 

class Child extends Parent { 
    static myMethod(msg) { 
    super.myMethod(msg); 
    } 

    myMethod(msg) { 
    super.myMethod(msg); 
    } 
} 

Child.myMethod(1); // static 1 
var child = new Child(); 

child.myMethod(2); // instance 2 

Here is the es6fiddle

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