js 函数里的 this

 1,当作为纯粹的函数调用时, this指向调用出的环境的上下文,看下面的例子

    var x = 1; 

  function test(){ 

    var x = 0; 

            alert(this.x);  //1
 
            alert(x);     // 0
  } 

  test(); 

  alert(x); //1
     alert(this.x);  //1

test()是在全局作用域里调用的,所以this就是指向全局作用域属性(window属性),而与test()函数里的x无关.

2,当作为对象调方法用时,this指的就是对象引用符'.'最前面的东东,

  即作为某个对象的方法调用,这时this就指这个上级对象。

function test(){ 

    alert(this.x); 

  } 

  var o = {}; 

  o.x = 1; 

  o.m = test; 

  o.m(); // 1 

3,作为构造函数调用 

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象

 var x = 2; 

  function test(){ 

    this.x = 1; 

  } 

  var o = new test(); 

  alert(x); //2 

运行结果为2,表明全局变量x的值根本没变。

4, apply调用

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

 var x = 0; 

  function test(){ 

    alert(this.x); 

  } 

  var o={}; 

  o.x = 1; 

  o.m = test; 

  o.m.apply(); //0 

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

如果把最后一行代码修改为 

o.m.apply(o); //1

运行结果就变成了1,证明了这时this代表的是对象o

原文地址:https://www.cnblogs.com/web-fusheng/p/6736362.html