javascript實現(xiàn)方法調(diào)用與方法觸發(fā)小結(jié)

字號:


    這篇文章主要介紹了javascript實現(xiàn)方法調(diào)用與方法觸發(fā)小結(jié)的相關(guān)資料,需要的朋友可以參考下
    在js中,this關(guān)鍵字是一個比較讓人有意思的東西,但是它的指向經(jīng)常讓初學(xué)者摸不著頭腦。
    其實要理解這個關(guān)鍵字,需要理清兩個問題——“方法的調(diào)用和方法的觸發(fā)”
    下面先看一段代碼
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>function</title>
    <script>
    function showThis(){
      console.info(this);
    }
    function Test1(){
      this.f=showThis;
    }
    function Test2(){
      this.f=function(){
        showThis();
      }
    }
    showThis();//window
    new Test1().f();//Test1  
    new Test2().f();//window
    </script>
    </head>
    <body>
    </body>
    </html> 
    20行打印出window對象,這個很容易理解,但是21行打印出Test1的實例對象,而22行卻打印出window對象。查看Test1和Test2的構(gòu)造,發(fā)現(xiàn)方法f最終都執(zhí)行了showThis方法。但是showThis中的this指向卻不同。這是因為Test1中的f方法直接指向showThis,new Test1().f()是以Test1 的實例直接調(diào)用showThis方法,調(diào)用者是Test1的實例。而new Test2().f()是在Test2的實例方法f中觸發(fā)window對象的showThis方法,其中的this就是指向其調(diào)用者window而不是觸發(fā)者Test2的實例。
    至此可以發(fā)現(xiàn)。this指向的是調(diào)用者,而觸發(fā)者只是推進(jìn)調(diào)用者執(zhí)行指定方法而已。