2016-06-19 11 views
0

私は3つのクラスを作成していますが、何かを表示したい場合、最後のクラスはinit関数を使用してプロパティに値を割り当てます。しかし、私は期待どおりに動作しません。javascriptのinit関数に問題があり、init関数で代入した後にプロパティを使用する

class Circle1 { 
    constructor(options) { 

    } 

    render() { 
    document.getElementById('result').innerHTML = 'Hello, '; 
    } 
} 

class Circle2 { 
    constructor(options) { 

    } 

    render() { 
    document.getElementById('result').innerHTML += 'My'; 
    } 
} 

class Circle { 
    constuctor(options) { 
     this.x = options.x; 
     this.y = options.y; 
     this.length = options.length; 

     this.bodies = []; 
     this.init(options); 
    } 

    init(options) { 
     this.first = new Circle1(options); 
     for (let i = 0; i < this.length; i++) { 
      this.bodies.push(new Circle2(options)); 
     } 
    } 

    render() { 
    /** 
    this.first.render(); 

    this.bodies.forEach(function(body) { 
     body.render(); 
    }); 
    **/ 
     document.getElementById('result').innerHTML += 'World'; 

    } 
} 

var c = new Circle({ 
    x: 20, 
    y: 20, 
    length: 6 
}); 

c.render(); 

このコードでは、「ワールド」が画面に表示されます。

ただし、コメントコードのコメントを外し、画面に「Hello、My(times length)World」と表示しようとしましたが、何も表示されません。

私は非常にクラスのinit関数と混同しています。私はその関数内のプロパティに値を割り当てることができると思ったが、結果はうまくいかないことを示している。私のコードで何が間違っていますか?

ここにはjsfiddleリンクがあります。

+0

をinit関数は全くありませんか?そのコードをコンストラクタに入れてください。 – Bergi

+0

'.innerHTML ='と '.innerHTML + =' – Bergi

+0

@Bergiの違いは、 'init'関数のハングアップだけです。私はそれがどのように機能するのか分かりません。私はいくつかのコードを読んで、それを使って自分でテストしたい。違いはなんですか?あなたは精巧にお考えですか? – newguy

答えて

0

あなたはconstructorの名前に誤り(コンストラクタが呼び出されていない)があります:あなたは `使用しないのはなぜ

class Circle { 
    constuctor(options) { 

==>

class Circle { 
    constructor(options) { 

[https://jsfiddle.net/5sv5hwLb/]

+0

OKを指摘してくれてありがとう。私はまだ「世界」を表示していたので問題はないと思ったが、どうしてそうなっただろうか? – newguy

+0

はい私はそれが修正の後であることを知っています。あなたの答えを変更する前に、画面に「世界」と表示されました。なぜJavaScriptは、コンストラクタが渡されず、 'Circle'のオブジェクトを作成できないというエラーを表示しないのですか? – newguy

+0

@newguy 'constructor'は必ずしも宣言する必要はないからです。 –

関連する問題