2017-01-25 14 views
1

JSでサブクラスのコンストラクタを作成するのに問題があります。クラスのコンストラクタはうまく動作します!コードを実行している場合Javascript(ES6)でサブクラスコンストラクタを正しく定義する方法は?

//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(); 

} 

、私はエラーthis.ballがpreloadStateクラスで定義されていません取得します。どうしてこんなことに?

答えて

1

あなたはサブクラスコンストラクタでthisを使用する前に、あなたがsuperを呼び出す必要があります:

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

例:https://jsfiddle.net/n0ek40ph/

別のオプションは、コンストラクタをオーバーライドすることではありません。

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

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

01深さの

より:

+0

グレート!ちょうど私が欲しいもの。フォローアップの質問:1. this.ballはpreloadStateのすべての関数でアクセス可能ですか? 2.関数内でpreloadStateのインスタンスをどのように渡すのですか? – PixelProgrammer

+0

良い! 1:はい、 'preloadState.start()'の後にあなたが呼び出すすべてのメソッドで。 2:私はこの質問を理解していません。 – Pimmol

+0

2. preloadState: 'var state = new preloadState()'のオブジェクトがあるとします。他の関数で 'state.start()'を使いたいとしましょう。 'function foo(state){state.start()}'です。それは可能でしょうか?別の関数でクラスオブジェクトを渡すことはできますか? – PixelProgrammer

関連する問題