javaScript this 详解

在实际应用中,this的指向大致可以分为以下四种。

#   作为对象的方法调用

#   作为普通函数调用时

#   构造器调用。

1.作为对象的方法调用,this指向该对象

  当函数作为对象的方法被调用时,this指向该对象;

例子:  

 var obj={

        a:1,

        getA:function(){

             alert(this===obj);//输出 :true;  this 指向obj

              alert(this.a);//输出1;

         }

    }

   obj.getA();

 

  当  函数(getA) 作为对象(obj)的方法被调用时,this指向该对象;

2.作为普通函数调用时,this的指向;

  当函数不作为对象的属性被调用时,也就是我们通常所说的普通函数方式,此时的this总是指向全局对象。

例子:

    window.name='globalName';

    var getName=function(){

        return this.name;//这里的this指向的  window(全局对象)

    }

    console.log(getName())//输出‘globalName’

  或者:

    window.name='globalName';

 

    var myObject={

 

        name:'sven',

        getName:function(){

           return this.name; 

        }

 

    }

 

var getName=myObject.getName;

myObject.getName()//输出sven

console.log(getName());//输出globalName

3.构造器调用。

构造器的外表跟普通函数一模一样,他们的区别在于被调用的方式,当用new运算符调用函数时,该函数总会返回一个对象,通常情况下,构造器里的this就指向返回的这个对象:

 var MyClass = function(){

    this.name='sven';

}

var obj = new MyClass();

alert(obj.name)//输出sven

这里需要注意的是:如果构造器返回了一个Object类型的对象,那么,此次的运算结果最终会返回这个对象,而不是我们之前期待的this

 

var MyClass = function(){

 

    this.name='sven';

    return {

     name:'anne'  //返回的是一个对象: {name:'anne'}

  }

 

}

 

var obj = new MyClass();

 

alert(obj.name)//输出anne

如果构造器不显示地返回任何数据,或者是一个非对象类型的数据,就不会造成上诉问题

 

posted @ 2015-09-14 23:12  孤独的白菜  阅读(228)  评论(0编辑  收藏  举报