js中this的四种调用模式

    在js中,this的含义比较多,在不同的情况下,代表的意义也不一样。总的来说有以下四种含义:

一、纯粹的函数调用

    在这种模式下,this代表全局对象Global。

   

   function test(){

        this.x=1;

        alert(this.x);


    }

    test();

   输出结果是1.

二、作为对象方法的调用

     函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

   

    function test(){

       alert(this.x);

    }

   var o={};

    o.x=1;

    o.m=test;

    o.m();//1

    

三、作为构造函数调用

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

    

   function test(){

         this.x=1;


      }

  var 0=new test();

     alert(o.x);//1

  运行结果为1,这里的this已经不是全局对象了。

    为了区分上面的例子:

  

   var x=2;
   
   function test(){

         this.x=1;
 
   }


   var o=new test();

      alert(x);//2

四、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

   证明这时this代表的是对象o。

原文地址:https://www.cnblogs.com/leyan/p/6100758.html