js中call()、apply()、bind()方法(学习整理)

 let obj = {
            nickName: "ace",
            say(a, b, c) {
                console.log('hi,i am  ' + this.nickName);
                console.log(a,b,c);
            }
        }
        
  let zz = {
     nickName: 'simba'
        }
   obj.say.call(zz, 10, 20, 30)
   obj.say.apply(zz, [10, 20, 30])
   let newfn = obj.say.bind(zz, 10, 20, 30)
   newfn()
   //obj.say.bind(zz, 10, 20, 30)()

在这里插入图片描述

定义了两个对象为obj和zz
以上为三种方法调用来于比较call、apply、bind的差别 虽然三个执行结果都一样但还是有差别的
执行obj.say()的时候结果为
在这里插入图片描述

call
当执行 obj.say.call(zz, 10, 20, 30)时,call方法里有两个参数,第一个参数为this所指向的对象,这里的对象为zz,第二个参数就是根据实参所传进去的值,有几个值就传几个值。

apply
执行obj.say.apply(zz, [10, 20, 30])时,apply方法里也有两个参数,第一个参数还是this所指向的对象,也为zz,第二个参数就跟call有差别了,apply的第二个参数必须放到一个数组里面传过去,是一个整体。

bind
bind和前两者不同的地方是,bind返回的是一个修改过this的函数或方法,如果想要执行它,就得再调用一下这个修改过this的函数,否则就不会执行,可以直接在后边加一个括号,或者用一个新的变量来接收。它的参数和call的参数一样。

  1. obj.say.bind(zz, 10, 20, 30)()
  2. let newfn = obj.say.bind(zz, 10, 20, 30)
    newfn()

总结

  • 相同点:三个方法第一个参数都是this想要指向的对象,想要指向谁,第一个参数里就把谁放进去
  • 不同点:
    1.apply里面的第二个参数为数组是一个整体,其余两个就是等个数的值
    2.bind的作用是返回一个修改过this指向的函数或方法,不会执行,如果想要执行就得再调用它就行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值