js/apply、call、bind的区别

call,apply,bind这三个方法其实都是继承自Function.prototype中的,属于实例方法

1、apply

  改变调用apply方法的函数this的指向,并执行该函数,使用apply时注意参数以数组的形式传递

  示例:

    function  fn1(a ){ console.log(this, a)}

    let obj = {'b': 11}

    fn1.apply(obj1, [22])  // {'b': 11} , 22

2、call

  改变调用apply方法的函数this的指向,并执行该函数,使用call时注意参数以单个的形式传递

  示例:

    function  fn1(a ){ console.log(this, a)}

    let obj = {'b': 11}

    fn1.call(obj1, 22)  // {'b': 11} , 22

3、bind

  改变调用apply方法的函数this的指向,不执行新生成的函数,新生成的函数使用call或者apply无效,不会改变新生成函数中的this,传参数和call方法一样

  示例:

    function  f1(){return  this.a}

    var  obj1 = {a:11111};

    var  obj2 = {a:22222};

    var  f2 = f1.bind(obj1)

    f2() // 11111

    console.log(f2.call(obj2))           // 11111

    console.log(f1.call(obj2))           // 22222

4、使用apply和call的小知识

  Array.prototype.slice.apply($('div'))  // 可以将类似数组的对象转换成数组

  Array.prototype.slice.call($('div'))  // 可以将类似数组的对象转换成数组

你可能感兴趣的:(js/apply、call、bind的区别)