JavaScript中的this关键字的深入理解

  • 1.一般用处
  • 2.this.x与apply()、call()
  • 3.无意义(诡异)的this用处
  • 4.事件监听函数中的this
  • 5.总结

在JavaScript中的this变量是一个令人难以摸清的关键字,this可谓是非常强大,充分理解this相关知识有助于我们在编写面向对象的JavaScript程序时能够迎刃有余。

1.一般用处

  对于this变量最重要的是能够理清this所引用的对象到底是哪一个,也许很多资料上都有自己的解释,但有些概念讲的偏复杂。简单的理解:首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象

示例一:

View Code
var obj={};
obj.x=100;
obj.y=function(){
   alter(this.x);
}
obj.y();  //弹出100

这段代码非常容易理解,当执行obj.y()时,函数是作为对象obj的方法调用的,因此函数体内的this指向的是obj对象,所以会弹出100。
示例二

View Code
 1 var checkThis=function (){
 2     alter(this.x);
 3 };
 4 var x="this is a property of window";
 5 var obj={};
 6 obj.x=100;
 7 obj.y=function(){alter(this.x)};
 8 var obj2=obj.y;
 9 obj.y();   //弹出100
10 checkThis(); //弹出this is a property of window
11 obj2();  //弹出this is a property of window

这里为什么会弹出'this is a property of window ',可能让人迷惑。在Javascript的变量作用域里面有一条规则“全局变量是windows对象的属性”。当执行checkThis();就相当于执行windows。checkThis(),所以会弹出'this is a property of window'

2,this,x于apply()、call()

通过call和apply可以从新定义函数的执行环境,即this的指向,着对于一些应用当中是十分常用的。

示例三:

View Code
function changeStyle(type,value){
    this.style[type]=value;
}
var one=document.getElementById('one');
changeStyle.call(one,'fontSize','100px');
changeStyle(one,'fontSize','100px');//出现错误,因为此时changeStyle中的this引用的是windows对象,而window并无style属性。

注意changeStyle.call() 中有三个参数,第一个参数用于指定该函数将被哪个对象所调用。这里指定了one,也就意味着,changeStyle函数将被one调用,因此函数体内this指向是one对象。而第二个和第三个参数对应的是changeStyle函数里的type和value两个形参。最总我们看到的效果是Dom元素one的字体变成了20px。

示例四apply():

 

 

 

posted @ 2012-08-13 15:15  wazhf  阅读(203)  评论(1编辑  收藏  举报