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

  • 相关阅读:
    三、Antd react 组件调用ref的用法获取实例
    三、gitextension 报错无法检出版本库的时候
    二、安装引入 antd
    一、React项目骨架搭建
    一、JAVA基础知识
    五、Maven创建Spring(IDEA2019-3-3)
    python爬取快手ios端首页热门视频
    接口测试之基础篇--http协议
    一些测试面试题
    性能测试一些相关的概念
  • 原文地址:https://www.cnblogs.com/mu-mu/p/4281934.html
Copyright © 2011-2022 走看看