js中的this

  js中this出现的频率是很高的,有时候会弄不清楚this到底指的是谁,所以这里对this做一个更详细的了解。

  一般情况下,this变量所引用的对象是判断所在函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象,即谁调用则指谁。

var obj={};

obj.x=100;

obj.y=function(){alert(this.x);};

obj.y();//弹出100

这里的obj.y(),函数是作为obj对象的方法调用的,因此函数体内的this指向的是obj对象,所以会弹出100。

 var checkThis=function(){

alert(this.x);

};

var x="this is a property of window";

var obj={};

obj.x=100;

obj.y=function(){alert(this.x);};

var obj2=obj.y;

obj.y();//弹出100

checkThis();//弹出'this is a property of window'

obj2();//弹出'this is a property of window'

obj.y()中调用函数的对象是obj对象,checkThis()中调用函数的对象是window对象。obj2()中调用函数的对象是window对象。在js的变量作用于中,规定"全局变量都是window对象的属性"。在obj2()中,可以写成 var obj2=function(){alert(this.x)},与checkThis的定义是一样的。

 

this.x和apply()、call()

通过call和apply可以重新定义函数的执行环境,即this的指向。

call()

function changeStyle(type,value){

  this.style[type]=value;

}

var one=document.getElementById('one');

changeStyle.call(one,'fontSize','100px');//正确

changeStyle('fontSize','300px');//出现错误,此时changeStyle中this引用的是window对象,但window对象并没有style属性。

 

apply()

function changeStyle(type,value){

  this.style[tyjjpe]=value;

}

var one=document.getElementById('one');

changeStyle.apply(one,['fontSize','100px']);//正确

changeStyle('fontSize','300px');//出现错误,同上。

 

有时候this是没有意义的,如:

var obj={

  x:100,

  y:function(){

    setTimeout(function(){alert(this.x);},2000);//在这里,调用setTimeout的是window对象,因此,this指向的是window,会弹出undefine。

}

};

obj.y();

 

var obj={

  x:100;

  y:function(){

   var that=this;

   setTimeout(function(){alert(that.x);},2000);//此时that指向的是obj对象。弹出正确。

 }

};

obj.y();  //弹出100

 

在事件监听中使用this

var one=document.getElementById('one');

one.onclick=function(){

  alert(this.innerHTML); //this指向的是one元素

};

 

总结:this指向的是包含this指针的上层对象。

普通函数,全局变量情况下:全局对象window

对象的方法:该对象

构造函数:新构造的对象

 

博文参考:http://www.108js.com/article/article1/10006.html?id=18

posted @ 2017-01-18 15:16  catherinehd  阅读(123)  评论(0编辑  收藏  举报