首页 > 代码库 > JS中this的指向问题
JS中this的指向问题
JS中this的定义:this对象是在运行时基于函数的执行环境绑定的(通俗点来说就是:this代表当前函数属于哪个对象)。
this一般情况下都代表的是global对象,在浏览器中就是window对象,在一些情况t下his的指向会发生改变,如下5种:
1.对象的字面量表示法中: var a=1
var obj={
a:0;
sum:function( ){
alert( this.a) ; //this.a=0, 这里的this代表obj对象;
return function(){
this.a; //这里的this.a=1,?为什么呢,因为每个函数都有两个特殊的变量,一个是arguments,还有一个就是this了,这样函数在访问this时就只会在自己的函数环境中进行查找,而不会向上进行搜索。
}
}
}
2.添加事件: var a=1;
oDiv1.onclick=function(){
alert(this.a); // this.a=undefined, 这里的this代表oDiv1,oDiv1没有a属性;
}
3.使用定时器: var a=1;
oDiv1.onclick=function(){
setInterval(function(){
alert(this.a) ; //this.a=1, 这里的this代表window对象,只要使用了定时器,那么里面的this就代表window对象;
},1000);
}
4.使用了ajax: ajax里面的this代表window对象 ,和使用定时器很像;
5.对象的实例化 : 假如我们自己创建了一个构造函数sum,里面有this.a=1;如果我们直接调用这个构造函数sum(),那么这个this代表window对象;
但是我们对它进行实例化var obj = new sum(),这样this.a上的this代表当前对象obj;
JS中this的指向问题