2016-11-28 6 views
1

クラスのインスタンスを参照するように、クラスメソッドを要素にアタッチしようとしています。'this'変数を使用するクラスとサブクラス

//例

class Default{ 
    constructor(){ 
     this.parent = null 
    } 

    assemble(){ 
     var form = document.createElement('form'); //CREATE FORM ELEMENT 
     var btn = document.createElement('button'); //CREATE BUTTON ELEMENT 
     this.parent = form; //DECLARE PARENT (CONSTRUCTOR) 
     btn.type = 'button'; 
     btn.innerHTML = 'click me'; 
     btn.addEventListener('click',this.submit); 
     form.appendChild(btn); 
     return form; 
    } 
} 

class Form extends Default{ 
    submit(){ 
     console.log(this.parent); //should return instantiated form value for property parent but doesn't (undefined) 
     console.log(this); //returns reference to the button element itself not the class (Form) 
    } 
} 

//

var route={ 
    init:()=>{  
     var form = new Form(); 
     var formBuild = form.assemble(); 
     document.body.appendChild(formBuild); 
    } 
}; 
document.addEventListener('DOMContentLoaded',route.init); 

質問CALLED:なぜボタン要素自体ではなくインスタンス化されたクラスを返すFormクラスのメソッドsubmit()があるの?

+0

あなたの質問は少し混乱している私はあなたのコードで[codepen](http://codepen.io/anon/pen/VmMpzN?editors=1111)が作成され、私はそれが期待通りすべてが動作します。あなたが達成したいと思う結果は何ですか? – Dario

+0

@Dario私は、この例では 'this.parent'のフォーム要素となる親を返すようにしようとしていますが、' this'はインスタンス化されたオブジェクトを全く参照しません。 –

+0

コードペンで、 'this.parent'がフォーム自体を参照していることを確認しましたが、' this'もフォームを返すようにしますか? – Dario

答えて

-3
class Default{ 
    constructor(){ 
     this.parent = null 
    } 

    assemble(){ 
     var form = document.createElement('form'); //CREATE FORM ELEMENT 
     var btn = document.createElement('button'); //CREATE BUTTON ELEMENT 
     btn.parent = form; //DECLARE PARENT (CONSTRUCTOR) 
     btn.type = 'button'; 
     btn.innerHTML = 'click me'; 
     btn.addEventListener('click',this.submit); 
     form.appendChild(btn); 
     return form; 
    } 
} 
+0

変更btn.parent =フォーム; // DECLARE PARENT(CONSTRUCTOR) – Harminder

+2

コード内の内容を変更しましたか?それがなぜ機能し、なぜ元のコードがないのですか?あなたの解答を[編集]してください。 – Bergi

+0

Bergi、this.parent = formから変更しました。 // btn.parent = formに親を宣言します(コンストラクタ)。 – Harminder

関連する問題