javascript里的this例子讲解
前两天给一朋友讲解javascript里的this怎么用,说了老半天要注意this所处的上下文关系,但就是没法理解。唉,也不怪他。javascript里的this有时候的确很让人揪心的,连我们这些经常写的人偶尔也会为之faint。后来,我被迫写了个小程序,绘声绘色外加严刑拷打终于解释清楚了。Oh,my GOD!整个人心情一下得到释放。I believe i can fly...
我干脆把例子放这里,加了详细的注释。应该说,这个例子是this变换角色最最基础的应用体现,权当是入门吧。高级玩家就不用看了,直接略过。
1 function clickFun(value,domEle){
2 //将参数传进来的值保存在当前对象属性_value里
3 this._value = value;
4
5 //将对DOM元件的引用保存在当前对象属性_domEle里
6 this._domEle = document.getElementById(domEle);
7
8 //this._domEle这时已经成为dom元件的引用。
9 //后面的纯this指代当前这个对象clickFun。
10 //因此这句等价意思就是:dom元件.ButtonFun属性 = 对象clickFun
11 this._domEle.ButtonFun = this;
12
13 this._domEle.onclick = this.clickHandler;
14
15 };
16 clickFun.prototype.clickHandler = function(){
17 //神奇的地方来了! 这里,注意,注意,要做推论题了。
18 //先回构造函数里。条件1:dom元件.ButtonFun属性 = 对象clickFun
19 //再看下方代码,条件2:this引用已经易主成dom元件了!(好个朝三暮四的厮)
20 //还观下方代码,条件3:this(dom元件).ButtonFun属性 注册给变量buttonObj
21 //综上所述,由此推论出,变量buttonObj成为对象clickFun的引用了!
22 var buttonObj = this.ButtonFun;
23
24 //接下来发生的事情就是没悬念了 T_T
25 var value = (buttonObj && buttonObj._value)?buttonObj._value:"unknown value";
26 alert("value : "+value);
27 //记住,这里this这厮已经是dom元件了
28 alert("this.value : "+this.value);
29 };
30
31
32 window.onload = function(){
33 new clickFun("赋给程序的值","bt");
34 }
2 //将参数传进来的值保存在当前对象属性_value里
3 this._value = value;
4
5 //将对DOM元件的引用保存在当前对象属性_domEle里
6 this._domEle = document.getElementById(domEle);
7
8 //this._domEle这时已经成为dom元件的引用。
9 //后面的纯this指代当前这个对象clickFun。
10 //因此这句等价意思就是:dom元件.ButtonFun属性 = 对象clickFun
11 this._domEle.ButtonFun = this;
12
13 this._domEle.onclick = this.clickHandler;
14
15 };
16 clickFun.prototype.clickHandler = function(){
17 //神奇的地方来了! 这里,注意,注意,要做推论题了。
18 //先回构造函数里。条件1:dom元件.ButtonFun属性 = 对象clickFun
19 //再看下方代码,条件2:this引用已经易主成dom元件了!(好个朝三暮四的厮)
20 //还观下方代码,条件3:this(dom元件).ButtonFun属性 注册给变量buttonObj
21 //综上所述,由此推论出,变量buttonObj成为对象clickFun的引用了!
22 var buttonObj = this.ButtonFun;
23
24 //接下来发生的事情就是没悬念了 T_T
25 var value = (buttonObj && buttonObj._value)?buttonObj._value:"unknown value";
26 alert("value : "+value);
27 //记住,这里this这厮已经是dom元件了
28 alert("this.value : "+this.value);
29 };
30
31
32 window.onload = function(){
33 new clickFun("赋给程序的值","bt");
34 }
html代码如下:
1 <button type="button" value="我是按钮的值" id="bt">click me</button>
测试按钮: