Javascript "this" 正在改变调用事件
Javascript "this" is changing in invoking event
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" 按预期工作.
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 ?
因为事件侦听器绑定到元素(this
事件侦听器内部将引用触发事件的元素)。当然,除非事件侦听器使用 .bind
.
明确地 绑定到另一事物
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" 按预期工作.
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 ?
因为事件侦听器绑定到元素(this
事件侦听器内部将引用触发事件的元素)。当然,除非事件侦听器使用 .bind
.