更改this的指向

首先說明一下,對于ES6新推出的箭頭函數(shù)(() => {}),是無法改變this指向的,因為箭頭函數(shù)中的this在函數(shù)聲明的時候就已經(jīng)指定好了。此處說的更改this指向,是指在函數(shù)(包括匿名函數(shù) function() {})被調(diào)用時,可以更改this的指向

假設(shè)有如下的代碼:

<body>
    <div class="box"></div>
    <script>
        const box = document.querySelector('.box');
        let a, b , c;

        const obj = {
            fn: function() {
                console.log(this);
            }
        };

        obj.fn();
    </script>
</body>

當(dāng)執(zhí)行obj.fn()方法時,this的指向是window對象。

如果我想要把this的指向更改為box對象,要如何做呢?有三種方法可以辦到

  • 調(diào)用call()方法,代碼如下:
obj.fn.call(box, a, b, c);

其第一個參數(shù)為this要指向的對象,其后的參數(shù)是一個列表。

  • 調(diào)用apply()方法,代碼如下:
obj.fn.apply(box, [a, b, c]);

其第一個參數(shù)為this要指向的對象,第二個參數(shù)是一個由參數(shù)組成的數(shù)組。

  • 調(diào)用bind()方法,代碼如下:
obj.fn.bind(box,  a, b, c)();

bind方法與call方法的參數(shù)格式類似,不同的是調(diào)用bind方法后,會返回一個更改了this指向的新函數(shù),如果要執(zhí)行,還需要在后邊添加()來執(zhí)行。

---(完)---

?著作權(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ù)。

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