JS中bind、call、apply之间有什么区别

JavaScript 中的 bindcallapply 方法都是预定义的函数原型方法,这三个方法都可以用来改变函数的调用上下文,也就是 this 的指向。

但它们在参数传递和返回结果上有所区别:

  1. call 方法

    • call 方法调用一个对象的一个方法,用另一个对象替换当前对象。
    • 语法:fun.call(thisArg, arg1, arg2, ...)
    • thisArg 是在 fun 函数运行时使用的 this 值。
    • arg1, arg2, ... 是传递给 fun 函数的参数,它们可以是任意数量的参数。
    • call 方法立即执行函数。

    示例:

    function  showName(age,  gender)  {
      console.log(this.name,  age,  gender);
    }
    var  person  =  {
      name:  '张三'
    };
    showName.call(person,  25,  '男');  //  输出:  张三  25  男
    
  2. apply 方法

    • apply 方法与 call 方法类似,也是用来改变函数的调用上下文。
    • 语法:fun.apply(thisArg, [argsArray])
    • thisArgcall 方法中的 thisArg 相同。
    • [argsArray] 是一个数组或类数组对象,其中包含着传递给 fun 函数的参数。
    • apply 方法也是立即执行函数。

    示例:

    function  showName(age,  gender)  {
      console.log(this.name,  age,  gender);
    }
    var  person  =  {
      name:  '李四'
    };
    showName.apply(person,  [30,  '女']);  //  输出:  李四  30  女
    
  3. bind 方法

    • bind 方法会创建一个新函数,这个新函数的 this 被指定为 bind 方法的第一个参数,而其余参数将作为新函数的参数。
    • 语法:fun.bind(thisArg, arg1, arg2, ...)
    • thisArg 是绑定 this 的值。
    • arg1, arg2, ... 是当新函数被调用时,预先提供的参数。
    • bind 方法返回一个新函数,并不立即执行。

    示例:

    function  showName(age,  gender)  {
      console.log(this.name,  age,  gender);
    }
    var  person  =  {
      name:  '王五'
    };
    var  boundShowName  =  showName.bind(person,  35);
    boundShowName('男');  //  输出:  王五  35  男
    

总结来说,callapply 都会立即执行函数,区别在于参数传递的方式不同,call 是逐个传递,而 apply 是以数组形式传递。bind 方法则返回一个新函数,可以延迟执行,并且可以预设一些参数。在实际开发中,可以根据需要选择最合适的方法来改变函数的调用上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值