网上看到一篇关于this的讲解,有时候还是回搞错this的上下文,在这里再复习一下
原文:http://www.cnblogs.com/miqi2214/archive/2009/04/10/1433202.html
原文:http://www.cnblogs.com/miqi2214/archive/2009/04/10/1433202.html
function clickFun(value,elemID){
this._value = value;
this._elem = document.getElementById(elemID);
this._elem.ButtonFun = this;//this指向clickFun对象
this._elem.onclick = this.clickHandler;//来自与原型
}
clickFun.prototype.clickHandler = function(){
//这里为什么this是指向_elem的引用,即指向document.getElementById(elemID);
//因为clickHandler赋给了onclick,而onclick的调用者是_elem,所以他的执行上下文为_elem对象
//所以buttonFun是指向clickFun的引用
var buttonFun = this.ButtonFun;
var value = (buttonFun && buttonFun._value) ? buttonFun._value : "unknow value";
alert("value" + value);
alert("this.value" + this.value);
}
window.onload = function(){
new clickFun("赋给程序的值","bt");
}
<button type="button" value="我是按钮的值" id="bt">click me~</button>