关于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返回的是一个函数最后必须调用它。

posted @ 2019-07-20 21:31  Michelyuan  阅读(1757)  评论(0编辑  收藏  举报