hotforcc 发表于 2013-1-27 04:45:52

Javascript的关于this用法的一个问题的分析


function show(){    this.a="1";//我的理解是 这里的 this 指bb    alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"    show2();    function show2(){      this.b="2";      alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......      show3();      function show3(){      this.c="3";      alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"      show4();      function show4(){          this.d="4";          alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined         }      }    } 
 
var bb=new show();

 
刚看到网上有人对这个问题的讨论,自己的分析如下
 
关键点:
一般没有为函数指定调用者的时候,this指的就是全局变量this
 
 this.a="1";//我的理解是 这里的 this 指bb
 alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
 当走到这一步的时候,当前的this应该指向的是 bb这个对象
 
 this.b="2";
 alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是   undefined ......
 
show2();
当调用show2的时候,并没有为show2指定调用者,这个时候函数里面的this应该指向的是window.
 
可以换一种写法,可以更加清晰的显示:

function show(){    this.a="1";//我的理解是 这里的 this 指bb    alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"    this.show2 = function (){      this.b="2";      alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......      this.show3=function (){      this.c="3";      alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"      this.show4=function (){          this.d="4";          alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined         }      this.show4();      }      this.show3();    }    this.show2();}var bb=new show();     

 
<span style="color: #000000;" />
 

 


 
页: [1]
查看完整版本: Javascript的关于this用法的一个问题的分析