bind、call、apply的区别和作用

时间:2022-12-31 23:53:52

一、主要作用

  三个方法都实现一个重要的作用:改变方法(函数)的this指向

二、主要区别

  最主要的区别是call()、apply()方法是立即调用当前函数,而bind()是返回一个改变了this指向的新函数,并不立即调用

三、各个方法详细说明

  1、call()详解

    (1)参数,call(newThis,arg1,arg2。。。)

     ① newThis包括以下类型:

       (1)不传,或者传null,undefined, 函数中的this指向window对象
       (2) 传递另一个函数的函数名,函数中的this指向这个函数的引用
       (3) 传递字符串、数值或布尔类型等基础类型,函数中的this指向其对应的包装对象,如 String、Number、Boolean
       (4) 传递一个对象,函数中的this指向这个对象

     ② args是将会传入被绑定函数的参数,被绑定函数的执行时参数顺序为:newThis,args,原参数

    

    (2)示例代码

 

      function a(){   
      console.log(this); //输出函数a中的this对象
      }

      function b(){}

      var c={name:"call"}; //定义对象c

      a.call(); //window
      a.call(null); //window
      a.call(undefined); //window
      a.call(1); //Number
      a.call(''); //String
      a.call(true); //Boolean
      a.call(b); //function b(){}
      a.call(c); //Object

 

  2、apply()详解

     apply(newThis,[arrArg])apply和call的作用完全一样,只是接收[arrArg]参数时必须为数组形式,否则就会报类型错误。

 

  3、bind()详解

    bind是在EcmaScript5中扩展的方法(IE6,7,8不支持)

 

    MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作 为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

 

    需要注意的是:bind方法的返回值是函数

 

    参考文档:https://www.cnblogs.com/libin-1/p/6069031.html

         https://www.cnblogs.com/pssp/p/5215621.html