关于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关键字用于引用当前对象。
人生最可贵的事情是sb似的坚持于追求……