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

      JS中this的定义:this对象是在运行时基于函数的执行环境绑定的(通俗点来说就是:this代表当前函数属于哪个对象)。

     this一般情况下都代表的是global对象,在浏览器中就是window对象,在一些情况t下his的指向会发生改变,如下5种:

     1.对象的字面量表示法中:    var a=1

                     var obj={ 

                         a:0;

                         sum:function(  ){

                            alert( this.a) ;      //this.a=0,   这里的this代表obj对象;

                            return function(){

                              this.a;  //这里的this.a=1,?为什么呢,因为每个函数都有两个特殊的变量,一个是arguments,还有一个就是this了,这样函数在访问this时就只会在自己的函数环境中进行查找,而不会向上进行搜索。      

                            }

                         } 

                     }

     2.添加事件:        var a=1;

                   oDiv1.onclick=function(){

                     alert(this.a);      //  this.a=undefined,  这里的this代表oDiv1,oDiv1没有a属性; 

                   }

     3.使用定时器:        var a=1;

                    oDiv1.onclick=function(){

                      setInterval(function(){

                         alert(this.a) ;    //this.a=1,   这里的this代表window对象,只要使用了定时器,那么里面的this就代表window对象;

                      },1000);

                   }

     4.使用了ajax:      ajax里面的this代表window对象 ,和使用定时器很像;

     5.对象的实例化 :  假如我们自己创建了一个构造函数sum,里面有this.a=1;如果我们直接调用这个构造函数sum(),那么这个this代表window对象;

              但是我们对它进行实例化var obj = new sum(),这样this.a上的this代表当前对象obj;

     

  • 相关阅读:
    [转]Android自定义控件三部曲系列完全解析(动画, 绘图, 自定义View)
    【深入Java虚拟机】之二:Java垃圾回收机制
    【深入Java虚拟机】之一:Java内存模型
    java线程安全
    [转]软键盘用法总结
    jqgrid 不能选中行, 每次点击单元格都自动选中第一行
    TextBox禁用与启用的方法
    Easyui TextBox 添加事件的方法
    运行程序时抛出异常“找不到请求的 .Net Framework Data Provider。可能没有安装。”
    序列 Sequence
  • 原文地址:https://www.cnblogs.com/hehewuyuana/p/5927439.html
Copyright © 2011-2022 走看看