前端.call/apply/bind的作用和区别

本文通过一个具体示例,深入探讨了JavaScript中call、apply及bind方法的使用场景及其区别。重点讲解了这三种方法如何帮助解决对象间方法借用的问题,并分别介绍了它们的特点:即时执行与延迟执行的区别。

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

在了解一个东西前,先需要了解这个东西为什么需要被创造出来

举个例子,ex:

<script>
    var a = {
        name : "fang" ,
        setName : (name) => {
            console.log(name)
        }
    }
    var b = {
      name : "zz"
    }
    a.setName.call(b,b.name)
</script>

如码所示,在a中有setName方法,但是b中没有,此时若b要调用setName方法,在b中复写一次setName方法,就显得很尴尬,此时就能调用call、apply、bind来实现了

区别:
同样是上面这个demo,若在apply中实现则要

<script>
    var a = {
        name : "fang" ,
        setName : (name) => {
            console.log(name)
        }
    }
    var b = {
      name : "zz"
    }
    a.setName.apply(b,[b.name]) 
    //apply中只能有两个参数,第一个参数表示引用单位变量名,第二个参数需以数组形式
</script>

此上两种方法,实际作用都是【对象b】 调用 【对象a】的方法;都是修改了setName中this的指向;都是马上进行运行,急打开页面时控制台就会马上出现 “zz”

但是若需求并不是“马上”调用,如果是需要触发一个条件后再调用呢?
bind就是拿来解决这种情况的

一样是上面那个demo,若我需要将次事件绑定到点击 <span>标签时,则

HTML

<spna>点击</span>

js

<script>
    var a = {
        name : "fang" ,
        setName : (name) => {
            console.log(name)
        }
    }
    var b = {
      name : "zz"
    }
    document.querySelector('span').onclick = a.setName.bind(b,b.name)
</script>

bind的作用是 引用 注意区别于调用

即它并不是马上进行运行,控制台上不会马上打印“zz”,只有在绑定到触发事件上时,被触发了,才会调用。例如这里的点击一次,打印一次

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值