關於JavaScript中bind、applay、call的區別


在JavaScript中this的指向一直是一個困擾我們的問題,在JavaScript中this的指向是不固定的,但是我們可以通過使用bind()、call()、apply()來改變this的指向,但是在ES6中this的指向與之前的有所不同。

箭頭函數的this始終指向函數定義時的this而不是執行時,也就是始終指向箭頭函數的外層,ES5中this的指向始終指向最后調用他的那個對象。

  • call() 方法使用一個指定的 this 值和單獨給出的一個或多個參數來調用一個函數
    語法:fun.call(thisArg, arg1, arg2, ...)
var a ={
        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.call(a,1,2)     // 3
  • apply() 方法調用一個具有給定this值的函數,以及作為一個數組(或類似數組對象)提供的參數.
    語法:
    func.apply(thisArg, [argsArray])
var a ={
        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.apply(a,[1,2])     // 3

  • bind()方法創建一個新的函數,在bind()被調用時,這個新函數的this被bind的第一個參數指定,其余的參數將作為新函數的參數供調用時使用
var a ={
        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.bind(a,1,2)()           // 3

區別call()、apply()只有第二個參數不一樣,apply的第二個參是數組,bind返回的是一個函數最后必須調用它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM