2017-02-24 5 views
-1

But no success when you click meというテキストをクリックすると、エラーが発生します。私はなぜエラーが発生するのか知っています。私の質問は、最高の修正は何ですか?このエラーは、mydivをクリックしたときにx.aが呼び出されたときに発生します。thismydivです。 mydivをクリックすると、どうすればx.aが正常に実行されるようにすることができますか?'this'とJavaScriptのaddEventListener

<!DOCTYPE html> 
 
    <html> 
 
    <head> 
 
    \t <title></title> 
 
    </head> 
 
    <body> 
 
    \t <div id="mydiv">But no success when you click me</div> 
 
    
 
    \t <script> 
 
    \t \t var x = new Thing(); 
 
    \t \t var y = document.getElementById('mydiv'); 
 
    \t \t x.a(); 
 
    \t \t y.addEventListener('click', x.a, false); 
 
    \t \t 
 
    \t \t function Thing() { 
 
    \t \t \t this.a=function() { 
 
    \t \t \t \t this.b(); 
 
    \t \t \t } 
 
    
 
    \t \t \t this.b=function() { 
 
    \t \t \t \t alert('Success'); 
 
    \t \t \t } 
 
    \t \t } 
 
    \t </script> 
 
    </body> 
 
    </html>
y.addEventListener('click', x.a.bind(x), false);

あなたは(あなたがDIV /ボタンをクリックしたとき)メソッドが呼び出された時点で、メソッドにイベントリスナーをバインド

+0

上記のHTMLファイルはhttp://globebop.com/intro/test/2.htmです。 –

+1

「x.a」は何にも束縛されていません。 'x.a'を'()=> x.a() 'に置き換えてください。 –

+0

申し訳ありません、Toraz。それは間違いです。 –

答えて

2

thisは反映しようとしていますメソッドが呼び出されたコンテキスト

+0

ありがとう、gor181。それはうまくいく。 mydivをクリックしてx.aが実行されると、これによって 'this'の値がmydivではなくxになります。 –

+0

@JimAndrewsはい、彼はなぜそれが動作するか知っています。それが彼が答えを投稿した理由です。 –