JavaScript中this的一些怪異現象

來源:互聯網
上載者:User

標籤:

 <!--JavaScript偽協議和內聯事件對於this的指向不同-->    <a href="#" onclick="alert(this.tagName);">click me</a><!--彈出A-->    <a href="javascript:alert(this.tagName);">click me</a><!--彈出undefined-->    <a href="javascript:alert(this==window);">click me</a><!--彈出true-->    <input id="btn" type="button" value="this demo" name="button"/>

 

<script type="text/javascript">               var name = ‘somebody‘;        var angela = {            name: ‘angela‘,            say: function () {                alert("I‘m " + this.name);            }        };        var btn = document.getElementById(‘btn‘);        //setTimeout和setInterval也會改變this的指向        /*        angela.say();//I‘m  angela        setTimeout(angela.say, 1000);//I‘m  somebody        setInterval(angela.say, 1000);//I‘m  somebody        */        //on...也會改變this的指向        /*                angela.say();//I‘m  angela        btn.onclick = angela.say;//I‘m  button        */        //匿名函數調整this指向        setTimeout(function () { angela.say(); }, 1000);//I‘m  angela        setInterval(function () { angela.say(); }, 1000)//I‘m  angela        btn.onclick = function () { angela.say(); };//I‘m  angela        setTimeout(function () { alert(this == window); }, 1000);//true        btn.onclick = function () { alert(this == btn); }//true        //call 和 apply調整this的指向        angela.say.call(btn);//I‘m  button        setTimeout(function () { angela.say.call(btn); }, 1000);//I‘m  button        setTimeout(function () { angela.say.apply(btn); }, 1000);//I‘m  button        btn.onclick = function () { angela.say.apply(btn); }//I‘m  button        //將this指向的對象儲存到變數        var name = ‘migo‘;        var mydemo = {            name: ‘angela‘,            say: function () {                alert("I‘m " + this.name);            },            init: function () {                var that = this;                document.getElementById(‘btn‘).onclick = function () {                    that.say();//I‘m angela                    this.say();//這兒報錯 this.say is not function                }            }        };    </script>

JavaScript中this的一些怪異現象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.