javascript基礎之我見(2)—-一句話搞定this,並淺析js,as相互調用的this問題

來源:互聯網
上載者:User

        在寫js的時候,我們往往會遇到this的概念,this的指向,總會讓人很頭痛。今天根據我對this的理解,和一些經驗,來用一句話總結下this。那麼這句話就是:

   this在有函數調用者時指向調用者否則指向GLOBAL,call、apply除外。

    那麼,我們通過一個例子來理解並記住這句話:

 1 function test(){ 2     console.log(this); 3 } 4 test();//Window 5 var th = {}; 6 test.call(th)//th 7 test.apply(th)//th 8 var a = function(){ 9 }10 a.test = test;11 a.test();//Function a12 a.prototype = {13     test : test14 }15 var b = new a();16 b.test();//b;17 a.prototype.test()//a.prototype18 setTimeout(b.test,100)//Window19 document.body.onclick = function(e){20     b.test();//b21     test();//Window22     console.log(this)//document.body23 }24 function callMethod(callback){25     callback();//Window26     arguments[0]();//arguments --> arguments.0()27 }28 callMethod(b.test);

 

上面的例子中注釋的位置顯示了當前this的指向,我們可以看到,this可以是對象也可以是函數等,在有調用者的時候指向調用者,call、apply可以改變函數內部的this,其他時刻指向的是Global(瀏覽器中為Window)。as的情況與js完全相同。

  下面我們來說說js,as之間調用時,this的指向:

  js調用as函數時,as函數內部的this指向root。

  as調用js時呢?實際上還是遵循上面的那句話。請看下面的例子

1 //AS代碼2 externalinterface.call("test");3 externalinterface.call("test.test");4 //JS代碼5 function test(){6   console.log(this);  7 }8 test.test = test;

  AS代碼中第一句調用,調用了全域函數test,並沒有制定調用者,則此時test函數中this指向Global,AS第二句調用,是對test下的test進行調用,所以this會指向函數test,也就是說AS調用js,對於this的指向與AS無關,判斷this的方式和js內部調用時完全相同。

      怎麼樣一句話記住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.