bind,call,apply的手动实现

共同点:

1、都用来改变函数的this对象的指向

2、第一个对象都是this要指向的对象

3、都可以用后续的参数进行穿参

举个栗子说区别:

const personOne = {
    name: "小周周",
    age: 4,
    say: function () {
        console.log(this.name + ',' + this.age);
    }
}
 
const personTwo = {
    name: "小小周",
    age: 2
}
 
personOne.say();    //小周周,4

如果我们想知道personTwo的信息,personTwo对象又没有方法要怎么实现:


personOne.say.call(personTwo);       //小小周,2
personOne.say.apply(personTwo);      //小小周,2
personOne.say.bind(personTwo);       //没有输出任何东西

可以看出call和apply中第一个参数就是要操作的对象,并且用call和apply实现了调用personOne中say的方法,并且直接执行改方法,而bind返回的其实仍然是个函数,我们需要执行它才能实现输出

personOne.say.bind(personTwo)();       //小小周,2

接着看传参

const personOne = {
    name: "小周周",
    age: 4,
    say: function (gender,father) {
        console.log(this.name + ',' + this.age + ',' + gender + ',' + father);
    }
}
 
const personTwo = {
    name: "小小周",
    age: 2
}
 
personOne.say('girl','周杰伦');    //小周周,4,girl, 周杰伦

用call、apply和bind:

personOne.say.call(personTwo, "boy", "爸爸周杰伦");       //小小周,2,boy,爸爸周杰伦
personOne.say.apply(personTwo, ["boy", "爸爸周杰伦"]);    //小小周,2,boy,爸爸周杰伦
personOne.say.bind(personTwo, "boy", "baba周杰伦")();     //小小周,2,boy,baba周杰伦

apply的第二个参数是一个类似数组(这里为什么是类似可以再百度一下),是所有参数的一个集合

区别说完了,看看各自的实现:

call:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值