bind call apply的区别

bind call apply的区别

三者都是用来绑定this的指向的,平时写公用库的时候使用的比较多,接下来我们一起看下他们的使用

bind的使用

bind的第一个参数就是要指定的this对象,后面的参数会依次传入到要绑定this的方法中的,但是需要注意bind绑定this后不会立即执行,而是返回一个绑定this对象以后的一个方法,需要手动执行

let bindObj1 = {
            name: '大脚',
            age: '41',
            init: function(sex, card) {
                console.log(`我是${this.name},性别${sex},今年${this.age}岁,我的身份是${card}`)
            }
        }
        bindObj1.init('女', '超市老板') // 我是大脚,性别女,今年41岁,我的身份是超市老板
        let bindObj2 = {
            name: '刘英',
            age: '31'
        }
        let bindFun = bindObj1.init.bind(bindObj2, '女', '花圃老板娘')
        bindFun() // 我是刘英,性别女,今年31岁,我的身份是花圃老板娘

call的使用

call的第一个参数就是要指定的this对象,后面的参数会依次传入到要绑定this的方法中的,但是需要注意call绑定this后会立即执行,不需要手动执行

let callObj1 = {
            name: '赵四',
            age: '41',
            init: function(sex, card) {
                console.log(`我是${this.name},性别${sex},今年${this.age}岁,我的身份是${card}`)
            }
        }
        callObj1.init('男', '赵玉田他爹兼职象牙山舞王') // 我是赵四,性别男,今年41岁,我的身份是赵玉田他爹
        let callObj2 = {
            name: '王美兰',
            age: '40'
        }
        callObj1.init.call(callObj2, '女', '赵玉田他妈') // 我是王美兰,性别女,今年40岁,我的身份是赵玉田他妈

apply的使用

apply的第一个参数就是要指定的this对象,需要注意的是apply只有两个参数,第二个参数是一个数组,数组里面的元素会依次传入到要绑定this的方法中的,apply绑定this后会立即执行,不需要手动执行

let applyObj1 = {
            name: '刘能',
            age: '41',
            init: function(sex, card) {
                console.log(`我是${this.name},性别${sex},今年${this.age}岁,我的身份是${card}`)
            }
        }
        applyObj1.init('男', '刘英他爹兼职象牙山小诸葛') // 我是刘能,性别男,今年41岁,我的身份是刘英他爹兼职象牙山小诸葛
        let applyObj2 = {
            name: '李秀莲',
            age: '40'
        }
        applyObj1.init.apply(applyObj2, ['女', '刘英他妈']) // 我是李秀莲,性别女,今年40岁,我的身份是刘英他妈

总结

bind, call, apply相同点

  1. 三个都可以用于改变this指向
  2. 三个方法的第一个参数都是要指向的this对象
  3. 三个都可以对绑定的方法进行传参
    bind, call, apply不同点
  4. apply只有两个参数,第二个参数需要传入数组,数组中的元素会依次传入方法中,bind和call可以有多个参数并且依次传入方法中
  5. apply和call会立即执行方法,bind会返回一个方法需要手动执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值