2017-01-25 1 views
1

Ich habe Probleme, einen Konstruktor für Unterklassen in JS zu machen. Die Konstruktoren für Klassen funktionieren jedoch gut!Wie definiert man Unterklassenkonstruktoren in Javascript (ES6) richtig?

//defining base class State 
class State { 
    constructor(){ 
     this.someText = "someText"; 
    } 
    start(){ 

    } 

    update(){ 

    } 

    exit(){ 

    } 
} 

//defining subclass preloadState 

class preloadState extends State{ 
    constructor(){ 
     this.ball = "red"; 
    } 

    start(){ 
     console.log(this.ball); 
    } 
} 

var state = new preloadState; 
state.start(); 

} 

Wenn der Code ausgeführt wird, erhalte ich die Fehler this.ball nicht in der preloadState Klasse definiert ist. Warum ist das so?

Antwort

1

Bevor Sie this in einer Unterklasse Konstruktor verwenden können, müssen Sie super nennen:

class preloadState extends State { 
    constructor() { 
     super(); 
     this.ball = "red"; 
    } 
} 

Beispiel: https://jsfiddle.net/n0ek40ph/

Eine weitere Option ist nicht den Konstruktor außer Kraft zu setzen:

class preloadState extends State { 
    start() { 
     this.ball = "red"; 
     console.log(this.ball); 
    } 
} 

Beispiel: https://jsfiddle.net/n0ek40ph/3/

Mehr in die Tiefe:

+0

Great! Genau was ich wollte. Folgefragen: 1. Ist this.ball über alle Funktionen in preloadState erreichbar? 2. Wie würde ich eine Instanz von preloadState in einer Funktion übergeben? – PixelProgrammer

+0

Gut! 1: Ja, in allen Methoden, die Sie nach 'preloadState.start()' aufrufen. 2: Ich verstehe diese Frage nicht. – Pimmol

+0

2. Angenommen, ich habe ein Objekt mit preloadState: 'var state = new preloadState()'. Nun sage ich, dass ich 'state.start()' in einer anderen Funktion verwenden möchte. 'function foo (state) {state.start()}'. Wird das möglich sein? Kann ich ein Klassenobjekt in einer anderen Funktion übergeben? – PixelProgrammer

Verwandte Themen