对于JavaScript this指针一直模棱两可,查看了ppk谈JavaScript里关于this的一些解释,感觉明白了一些。
1. this可以被使用在任何一个函数和方法中,并且它总是引用定义该方法的对象。
例如:
var test=new Object();
test.a=3;
test.b='4';
test.c=function(){
alert(this.a*this.b);//提示框输出12
}
说明:
方法c是test定义的,因此其中this就是test对象
2. 在传统的w3c模型中,JavaScript事件处理程序成为它们所注册到的html元素的方法。
function test(){
this.style.backgroundColor='#000';
}
test();
此时test函数是JavaScript全局对象——window对象的一个方法。因此this指向window对象,但是没有style属性,将会报错.
但如果我们采用事件注册,x.οnclick=test;
则test将成为x的一个方法,因此this=x对象。
现在把注册过程稍微改改
x.οnclick=function(){
test();
}
此时,x.onclick的对应方法是匿名函数,而test只是被匿名函数所调用,因此test中的this=window
因此,如果想使用this关键字,必须确定它确实引用了在其上注册事件处理程序的那个元素
以下三个方法均是正确可行的:
(1) <element οnclick="this.style.backgroundColor='#cc0000'">
(2) x.οnclick=test;
(3)x.addEventListener('click',test,false);
但是x.attachEvent('onclick' test)是不可行的 ,因为微软事件模型缺乏对this关键字的支持。