关于js中的this关键字

最近在学习js,看了关于this关键字,感觉水有点深,所以在网上查了很多的关于this关键字的解释说明,在此处总结一下:

1.普通函数中的this关键字,因为普通函数的拥有者是window对象,所以此处的this代表window对象,如下例:

1 var test = function(){
2             this.name = "john"
3         }
4         test();
5         alert(window.name);

解释:因为普通函数的拥有者是window对象,所以此处的this代指window,执行此段代码,将弹出john。

2.对象中的函数中的this,因为对象拥有这个函数,所以这里的this代表该对象,如下例:

1 var obj = {
2             name: "Smith",
3             sayHi: function(){
4                         alert(this.name);
5                     }
6         };
7         obj.sayHi();

此段代码执行,将弹出Smith。

3. 对象中一个函数嵌套的问题,如下代码示例:

 1 var obj = {
 2             name: "Smith",
 3             sayHi: function(){
 4                         setTimeout(
 5                                 function(){
 6                                     alert(this.name);
 7                                 },
 8                                 2000);
 9                         }
10         };
11         obj.sayHi();

在示例代码中,此处却不能再弹出Smith,原因何在呢,根据我的理解,虽然sayHi函数属于obj对象,但是当调用obj对象的sayHi方法后,此函数又调用了setTimeout函数,而该函数有调用了一个匿名函数,前面已经说过,每个函数均属于window对象,所以此次setTimeout对象调用的这个匿名函数中的this代指window对象,而window对象不存在name这个属性,故不能弹出Smith

 

总结:在函数中使用this时,关键在于找到这个函数的拥有者,找到这个函数的拥有者即可马上了解函数中的this关键字的含义,同时也需明白函数是在被拷贝(copy)还是在调用这个函数(call)。

在dom模型下关于this的举例,我就不再赘述了,网上有很多资料,其实原理就一句话----this关键字用于引用当前对象。

 

 

posted on 2012-07-13 14:18  幸福从不迟疑  阅读(312)  评论(0编辑  收藏  举报