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「this」在調用事件中發生變化

document.getElementById(「button2」)。onclick = myObject.myFunction.bind(myObject); //在這種情況下,因爲我們將myObject綁定到myFunction,所以「this」將指向myObject.and然後「this」按預期工作。

document.getElementById(「button1」)。onclick = myObject.myFunction; //在這種情況下,我期望「this」應該指向myObject.But,但我把它看作undefined.why?

+0

因爲簡化,它會在某處調用'onclickCallback()',將'this'設置爲無。 – deceze

+0

如果你在互聯網上搜索,你可以在2分鐘內找到答案。在你的函數開始時將這個上下文保存在任何變量中。你可以使用綁定或呼叫來呼叫你想要的上下文中的函數 –

+1

@deceze _to nothing _ ???我認爲它爲元素設置了這個。 –

回答

0

因爲事件監聽器被綁定到元素(事件監聽器中的this將引用觸發該事件的元素)。當然,除非事件監聽器使用.bind明確地綁定到另一個事物。

相關問題