zoukankan      html  css  js  c++  java
  • js中this的问题

     1 Javascript的this用法
     2 
     3 this是Javascript语言的一个关键字。
     4 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,
     5   function test(){
     6     this.x = 1;
     7   }
     8 随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
     9 下面分四种情况,详细讨论this的用法。
    10 情况一:纯粹的函数调用
    11 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
    12 请看下面这段代码,它的运行结果是1。
    13   function test(){
    14     this.x = 1;
    15     alert(this.x);
    16   }
    17   test(); // 1
    18 为了证明this就是全局对象,我对代码做一些改变:
    19   var x = 1;
    20   function test(){
    21     alert(this.x);
    22   }
    23   test(); // 1
    24 运行结果还是1。再变一下:
    25   var x = 1;
    26   function test(){
    27     this.x = 0;
    28   }
    29   test();
    30   alert(x); //0
    31 情况二:作为对象方法的调用
    32 函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
    33   function test(){
    34     alert(this.x);
    35   }
    36   var o = {};
    37   o.x = 1;
    38   o.m = test;
    39   o.m(); // 1
    40 情况三 作为构造函数调用
    41 所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
    42   function test(){
    43     this.x = 1;
    44   }
    45   var o = new test();
    46   alert(o.x); // 1
    47 运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
    48   var x = 2;
    49   function test(){
    50     this.x = 1;
    51   }
    52   var o = new test();
    53   alert(x); //2
    54 运行结果为2,表明全局变量x的值根本没变。
    55 情况四 apply调用
    56 apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
    57   var x = 0;
    58   function test(){
    59     alert(this.x);
    60   }
    61   var o={};
    62   o.x = 1;
    63   o.m = test;
    64   o.m.apply(); //0
    65 apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
    66 如果把最后一行代码修改为
    67   o.m.apply(o); //1
    68 运行结果就变成了1,证明了这时this代表的是对象o。

    转载于 阮一峰。
  • 相关阅读:
    SQL优化之博客案例
    Drools之规则属性
    Android 8.0以上系统应用如何保活
    Android 8.0(api27)静态广播和动态广播接收问题
    Android开发 WorkManager详解
    使用EOS Camera Movie Record 软件在计算机上使用 Canon EOS DSLR相机录制视频 。
    关于使用AlarmManager的注意事项
    系统服务之定时服务(AlarmManager)
    Android定时器AlarmManager
    Android 代码混淆
  • 原文地址:https://www.cnblogs.com/lixuekui/p/5838340.html
Copyright © 2011-2022 走看看