js中的this运用

this

只能在函数内部使用,原则,this指向一个对象,在函数中调用。this指的是调用函数的那个对象。

可以参考”http://blog.jobbole.com/39305/
常用的调用情况有下面几种,在使用的时候记住使用的环境进行嵌套就行了 。

1.纯粹的函数调用时,属于全局调用,因此this指向全局window。

function test(){
    this.x=1;
    alert(this.x);      
}     
test();//1

为了证明this指向全局对象,以下代码等同于上边:

var x=1;
fucntion test(){
    alert(this.x)
}
  test();//1

2.当函数作为对象的方法调用时,this指向该对象。

例:var obj= {
    x:10,
    y:20,
    fn:function(){
        this.x = 20;
        console.log(this)//this指向obj
    }
}
fn()

3.当函数作为弹出函数调用时,this指向全局对象(严格模式时,为undefined)

3.作为构造函数中的this时,指向创建该函数的对象

例:function fn1(){
        var i = 0 ;
        var j = 0 ;
        this.x=1;
         console.log(this)
    }
fn2 = new fn1();
fn2 = function(){
      this.y=1;
      console.log(this)//this指向fn1
 }
 fn1(fn2) 

4.apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。

var x = 0;

  function test(){

    alert(this.x);

  }

  var o={};

  o.x = 1;

  o.m = test;

  o.m.apply(); //0 

嵌套函数中的this不会继承上层函数的this,如果需要,可以用一个变量保存上层函数的this。

再总结的简单点,如果在函数中使用了this,只有在该函数直接
被某对象调用时,该this才指向该对象。正常函数的调用,this
指的是window,特殊函数的调用,this指象对象。函数声明、
匿名函数和函数表达式在全局中调用 this指向window