2017-04-21 24 views
0
var myObject = { 
    myFunction : function(){ 
     var randomizer = Math.random() * 10; 

     if(randomizer > 5){ 
      this.myGreaterThanFunction(); 
     }else{ 
      this.myLesserThanFunction(); 
     } 
    }, 

    myGreaterThanFunction: function(){ 
     document.getElementById("result").innerHTML = "randomizer number is greater than 5"; 
    }, 

    myLesserThanFunction: function(){ 
     document.getElementById("result").innerHTML = "randomizer number is less than 5"; 
    } 
}; 

myObject.myFunction(); //この場合、 "this"はmyObject.henceを指します。 "this"はここで期待通りに動作します。Javascript「この」イベントが呼び出されるときに変更されます。

のdocument.getElementById( "ボタン2")のonclick = myObject.myFunction.bind(myObjectという)。 //この場合、myObjectをmyFunctionにバインドするとき、「this」はmyObjectを指し示し、「this」は期待どおりに機能します。

document.getElementById( "button1")。onclick = myObject.myFunction; //この場合、「this」はmyObjectを指しているはずです。しかし、これは未定義です。なぜですか?

+0

簡略化のため、どこかで 'onclickCallback()'と呼ばれ、 'this'を何も設定しません。 – deceze

+0

インターネットで検索すると2分で答えが見つかります。それに応じて関数の開始時に任意の変数にコンテキストを保存してください。あなたはあなたが望む文脈の中で関数を呼び出すためにbindまたはcallを使うことができます –

+1

@deceze _to nothing _ ???私はそれが要素に「これ」を設定すると思う。 –

答えて

0

イベントリスナーは要素にバインドされるため(イベントリスナー内のthisはイベントを発生させた要素を参照します)。もちろん、イベントリスナーがと明示的に別のものにバインドしない限り、.bindを使用します。

関連する問題