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

  • 相关阅读:
    logging模块、sys模块、shelve模块
    re模块、hashlib模块
    包、常用模块
    模块
    迭代器、生成器、递归、二分法
    函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器
    函数
    文件处理
    字符编码
    Djiango导读
  • 原文地址:https://www.cnblogs.com/mu-mu/p/4281934.html
Copyright © 2020-2023  润新知