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对象!

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/mu-mu/p/4281934.html
Copyright © 2011-2022 走看看