call、apply、bind使用对比

本文详细介绍了JavaScript中call、apply、bind方法的用途,通过实例展示了它们如何改变函数内部的this指向。对比分析了三者之间的差异,特别是参数传递的方式:call直接传参,apply以数组形式传参,bind则返回新函数以供后续调用。此外,还探讨了这三种方法在实际开发中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

call()apply()bind()都是用来干嘛的?我们先来看2个例子

  • 例1的运行结果:
    this指向当前对象

  • 例2的运行结果:
    this指向windows

比较一下这两者的this的差别,第一个打印里面的this指向obj;第二个全局声明的shows()函数,thiswindow。而 call()apply()bind()方法就是用来重新定义this这个对象的!如:
修改this指向db对象
以上返回的结果都是一致的,this指向了db对象,只是bind方法后面多了一个(),由此也得出结论,bind返回的是一个新的函数,你必须重新调用它才会被执行。

  • 我们再对比一下callapplybind传参的情况:
    传参差异对比

从上面4个结果可以看出:callbindapply这三个函数的第一个参数都是this的指向对象,第二个参数有差别了:

  • call的参数是直接放进去的,第二个,第三个第n个参数都用逗号分割,直接放到后面obj.myFun.call(db,“河南”,“深圳”,…,“string”)。
  • apply的所有参数都必须放在一个数组里面传进去obj.myFun.apply(“db”,[“河南”,“深圳”,…,“string”])。
  • bind除了返回是函数以外,它的参数和call是一样。当然三者的参数不限定是string类型,允许是各种类型,包括函数,对象等等!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值