函數(shù)調(diào)用的方式和this的丟失

函數(shù)的幾種調(diào)用方式

    01 普通函數(shù)調(diào)用 內(nèi)部的this指向全局對象window
    02 構(gòu)造函數(shù)調(diào)用 內(nèi)部的this指向新創(chuàng)建的對象
    03 對象的方法調(diào)用 內(nèi)部的this指向調(diào)用的對象本身
    04 通過call 或者是apply方式調(diào)用(函數(shù)上下文),this指向的是當(dāng)前的上下文對象

this丟失demo演示

<script>

    var obj = {
        name:"張三",
        getName:function () {
            console.log(this.name);
        }
    };

    //以對象的方法來進(jìn)行調(diào)用
    obj.getName();  //張三

    var getName = obj.getName;
    getName();  //以普通函數(shù)的方式調(diào)用,此時內(nèi)部的this指向的是window對象  打印的是window.name 為空值

</script>

代碼示例02

<script>
    //01 獲取頁面中id值為demo的標(biāo)簽
    //var div = document.getElementById('demo');
//    var getId = document.getElementById;
//    var div = getId('demo');        //會報錯?
//    console.log(div);

    //借用apply來修正this
    document.getElementById = (function (func) {
        return function () {
           return func.apply(document,arguments);
        }
    })(document.getElementById);


    var getId = document.getElementById;
    var div = getId('demo');        //會報錯?
    console.log(div);
</script>

代碼說明:

01 因?yàn)閐ocument.getElementById方法的內(nèi)部實(shí)現(xiàn)中需要使用到this,這個this本來期望指向的是document對象

02 當(dāng)我們以document.getElementById來調(diào)用的時候,內(nèi)部的this指向document對象

03 但是當(dāng)我們以getId的方式調(diào)用的時候,內(nèi)部的this指向的是window對象(因?yàn)槲覀円云胀ǖ姆绞竭M(jìn)行調(diào)用)

  • this: this所在的函數(shù)在哪個對象中, this就指向該對象(大部分情況);
  • 少數(shù)情況特殊:
    1. 如果this在定時器中, this就指向window;
    2. 如果this在事件源中, this就指向產(chǎn)生這個事件源的對象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在JavaScript編程中,this關(guān)鍵字總是讓初學(xué)者感到迷惑,F(xiàn)unction.prototype.call和...
    白小蟲閱讀 469評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 第一部分 準(zhǔn)入訓(xùn)練 第1章 進(jìn)入忍者世界 js開發(fā)人員通常使用js庫來實(shí)現(xiàn)通用和可重用的功能。這些庫需要簡單易用,...
    如201608閱讀 1,409評論 1 2
  • 今天下午突然想到明天萬圣節(jié),今晚小屁孩可以搗拾搗拾去要糖吃。趁著下班之時去了趟喜薈城買了套南瓜服,馬不停蹄地回家想...
    初升的太陽曈曈閱讀 553評論 0 0
  • 久雨后的長沙終于放晴了,壓抑了許久的不安在太陽出來的剎那心情也放晴了,似乎看到了那些洪水將要消逝。周末還是躺了個懶...
    簡小取閱讀 329評論 10 4

友情鏈接更多精彩內(nèi)容