2016-03-03 12 views
6

के साथ अपरिभाषित नहीं होना चाहिए मैं वर्तमान में ईएस 6 में एकाधिक-फाइल विरासत बनाने की कोशिश कर रहा हूं, नोड के साथ। जेएस और बेबेल (मैं ईएस 6 से कोड को परिवर्तित करने के लिए बेबेल का उपयोग कर रहा हूं ईएस 5 के कारण नोड अभी ईएस 6 लागू नहीं करता है)। मैं differents फ़ाइलों को "लिंक" करने के लिए आयात/निर्यात का उपयोग कर रहा हूं।TypeError: सुपर अभिव्यक्ति शून्य या फ़ंक्शन होना चाहिए, बैबेल

वास्तव में मेरे पास है: जनक क्लास (फ़ाइल 1)

export class Point 
{ 
    constructor(x, y) 
    { 
     this.x = x; 
     this.y = y; 
    } 

    toString() { 
     return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

और: बाल क्लास (फ़ाइल 2)

import Point from './pointES5' 

export class ColorPoint extends Point 
{ 
    constructor(x, y, color) 
    { 
     super(x, y); 
     this.color = color; 
    } 

    toString() { 
     return super.toString() + ' in ' + this.color; 
    } 
} 

और मुख्य मुख्य (फ़ाइल 3)

import Point from './pointES5' 
import ColorPoint from './colorpointES5' 

var m_point = new Point(); 
var m_colorpoint = new ColorPoint(); 

console.log(m_point.toString()); 
console.log(m_colorpoint.toString()); 

मैं ऐसा कर रहा हूं कि माता-पिता और बच्चे से, toString() विधियों की कॉल का परीक्षण करने के लिए।
तो फिर मैं कोड को ES6 से ES5 में कनवर्ट करने के लिए बैबेल का उपयोग करता हूं और यदि यह ठीक है या नहीं, तो मैं प्रत्येक भाग को अलग-अलग परीक्षण करने के लिए चलाता हूं।
- प्वाइंट (अभिभावक) अच्छा है, और बिना त्रुटि के निष्पादित करें।
- ColorPoint (बच्चा) पूरी तरह से नहीं चला और फेंक:

TypeError: Super expression must either be null or a function, not undefined

StackTrace की पहली पंक्ति है: इस कोड

function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.proto = superClass; } (It comes from the ES5 converted code (Babelified), and I can post it entirely if it's needed).

यह निराशा होती है कारण है बहुत आसान है ... लेकिन मुझे नहीं लगता कि त्रुटि का कारण क्या है।

मैं कोलाहल के विभिन्न संस्करणों (5, 5.8, 6) लेकिन कोई मतभेद है ...

क्या मैं गलत किया है की कोशिश?

पीएस: मैं यह बताना भूल गया: जब मैं इसे केवल एक फ़ाइल में करता हूं तो यह बिल्कुल सही काम करता है। लेकिन यह केवल एक फ़ाइल से वर्ग ... के लिए वास्तव में मेरे लिए महत्वपूर्ण है

उत्तर

24

आपका निर्यात अपने आयात से मेल नहीं खाता:

export class Point 
// and 
import Point from './pointES5' 

आप एक नामित प्रतीक निर्यात कर रहे हैं लेकिन डिफ़ॉल्ट का आयात, तो आप आपकी दूसरी फ़ाइल में Point के रूप में गलत ऑब्जेक्ट प्राप्त होगा। या तो उपयोग

आप कर सकते हैं:

export default class Point 
प्रथम श्रेणी फ़ाइल में

या

import {Point} from './pointES5'; 
दूसरी फ़ाइल में

सही संदर्भ लाने के लिए। यदि आप सिंगल-क्लास-प्रति-फ़ाइल लेआउट के लिए जा रहे हैं, तो मैं पूर्व का सुझाव दूंगा। आप आमतौर पर केवल एक वर्ग को निर्यात किया जा रहा है, इसलिए यह डिफ़ॉल्ट के रूप में समझ में आता है।

// in Point 
module.exports = { 
    Point: Point 
}; 

// in ColorPoint 
var Point = require('./pointES5'); // will point to *the whole object* 

class SubPoint extends Point 
+0

वाह लानत:

क्या आप अभी उपयोग कर के बराबर है!मैं थोड़ा और समझता हूं कि "डिफ़ॉल्ट" कीवर्ड क्या है और इसके लिए अब इसका क्या उपयोग किया जाता है! आपकी मदद के लिए बहुत बहुत धन्यवाद ! यह पूरी तरह से काम करता है! : डी – Aethyn

+0

यदि आप बंडलिंग के लिए वेबपैक का उपयोग कर रहे हैं, तो मैं @ssube द्वारा सुझाए गए दूसरे दृष्टिकोण का उपयोग करने की अनुशंसा करता हूं जो प्रदर्शन उद्देश्यों के लिए वेबपैक के 2.0 पेड़ हिलाकर लाभ उठाएगा: http://2ality.com/2015/12/webpack पेड़-shaking.html –

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