zoukankan      html  css  js  c++  java
  • this,你是谁?

    在js中this不像其它语言那样容易理解,它有时候指window对象,有时候又是其它对象,那么this,你到底是谁呢?
    要分析this就要先理解js中的方法定义,因为this一般都是在方法中使用的,而且方法在js中的地位又很特殊。


    在js中定义的方法一定不会单独存在,它必定属于某个对象,所以this就是代表方法属于的那个对象。

    1、一般方法

    function test() { 
        alert(this==window); 
    } 
    test();

    像这种普通的方法定义,方法并没有属于某个对象呀?其实js里有个全局的window对象,没错,这个方法就是定义在window对象下了,所以里面的this肯定就是window。

    2、方法,还是方法

    function test1(){
    
        function test2(){ 
            alert(this==window) 
        } 
        test2() 
    } 
    test1();

    这种情况呢,test2没有明显的属于某个对象,那它就...对,那它就属于window对象,所以里面的this就是指window对象。

    3、对象的方法

    var o={ 
        test:function(){ 
            alert(this==window); 
        }    
    } 
    o.test(); 

    这种情况就很容易理解了,test方法属于o对象,this当然是指o对象了。

    4、再见对象

    function Persion () { 
        this.name="mu"; 
    }
    
    Persion.prototype.show=function(){ 
        alert(this.name); 
    }
    
    var p=new Persion();
    
    p.show();

    再来看Persion方法,这里的Persion是构造函数,所以this就是指new的时候js创建的匿名对象,这个匿名对象又赋给了p对象,于是this就是指p对象。

    5、别忘了事件

    var btn=document.getElementById("btn"); 
    btn.onclick=function(){ 
        alert(this); 
    } 

    onclick方法属于btn对象,所以this指向btn

    btn.addEventListener("click",function(){ 
        alert(this); 
    })
    
    btn.attachEvent("onclick",function(){ 
        alert(this); 
    });

    这里比较特殊了,前者是W3C标准的,this指向btn,后者是ie专有的,this指定window,这里只能死记了。


    最后总结一句话:this代表谁,就看方法属于谁,ie事件绑定指window对象!

  • 相关阅读:
    HTTP状态代码
    安装mySQL数据库常见问题
    python3.6安装版本选择
    用连接池提高Servlet访问数据库的效率
    策略模式
    如何在vue项目中修改less变量,多主题项目解决方案
    【前端】vue项目 url中传递数组参数
    element date-picker默认值问题
    echart 折线图legend不显示的问题
    vue学习之父子组件通信两种方法
  • 原文地址:https://www.cnblogs.com/mu-mu/p/4281934.html
Copyright © 2011-2022 走看看