zoukankan      html  css  js  c++  java
  • javascript里面this机制的几个例子

    javascript里面的this值会随着使用场景的不同二发生变化,但是总有一个原则,那就是this总指向当前调用函数的那个对象。以下我会举几个例子来说明这个问题。
    1.this本身总是指向当前的类的实例
    function showMsg(){
    var msg=1;
    alert(this.msg);
    }
    showMsg();
    这样调用的时候显示undefined,因为showMsg没有实例,所以不能用this
    2.下面来看一个点击事件
    <div id="nav" onclick="getId();">ddd</div>
    function getId() {
    alert(this.id)
    }

    在段代码运行结果显示this.id是未定义的,判断this指向谁,看执行时而不是定义时。只要函数没有绑定在对象上使用,那么它的this就是window。 里面这个this是getId函数内部的,但不是div这个dom内部的。
    这段代码相当于div.onclick = function() { getId(); }
    有几种解决方法
    a.
    <div id="nav">ddd</div>
    window.onload=initForm;
    function initForm()
    {
    document.getElementById("nav").onclick=getId;
    }
    function getId() {
    console.log(this)
    alert(this.id)
    }

    在这段代码中,函数被绑定在了对象上。所以结果是可行的。
    b.
    <div id="nav" onclick="getId(this);">ddd</div>
    function getId(elem)
    {
    alert(elem.id);
    }

    这段代码是相当于把this传给了elem ,elem.id是可以得到的。
    3.针对第二个例子的c方法,还想再这多说点其它东西
    <div id="nav" onclick="getId(this);" xid="weixin">ddd</div>
    function getId(elem)
    {
    console.log(elem)
    alert(elem.id ); //这个是可以的 id是html里面有的属性
    alert(elem.xid ); //但是这个不可以,因为xid不是固有属性$(item).attr("xid")
    alert(this.id) //这个也是不行的
    }

    4.可以再看一下这个例子,跟前面是一样的

    <form action="#">
    <select id="nav">
    <option value="">Month</option>
    <option value="0">January</option>
    <option value="1">February</option>
    <option value="2">March</option>
    </select>
    </form>

    window.onload=initForm;
    function initForm(){
    document.getElementById("nav").onchange = getId;
    }
    function getId() {
    console.log(this)
    var xid= this.options[this.selectedIndex].value;
    alert(xid);
    } //这个可以得到id值

    这种也是可以得到结果的。

  • 相关阅读:
    全排列和几道例题
    NOJ1333: [蓝桥杯2017初赛]Excel地址
    力扣5-最长回文子串-(Manacher算法)
    CF1003E-Tree Constructing-(构造+dfs)
    NOJ1329:[蓝桥杯2017初赛]k倍区间-(前缀和)
    Java 时间
    小魂和他的数列-(离散+二分+树状数组)
    AC自动机入门和几道例题
    java写入加速
    清理 Excel 导出的 HTML 的多余属性
  • 原文地址:https://www.cnblogs.com/qianxinxu/p/5477294.html
Copyright © 2011-2022 走看看