2021-05-16 bind,call和apply的异同与用法

1.bind,call,apply 的异同
相同点
  • 第一个参数都可以改变this指向,第二个参数可以传参
  • 都是Function.prototype的方法,所以每个函数都可以使用bind,call和apply
不同点
  • bind是返回绑定this之后的函数,用于稍后调用,call和apply是立即执行
  • bind会返回一个新函数,如果以该新函数作为构造函数来创建一个新对象,那么此时this不再指向bind的第一个参数而是指向new出来的实例
  • apply的第一个形参之后的参数是一个数组,bind和call的第一个形参之后的参数可以用arguments表示,也可以写成形参列表
2.改变this指向
/******part1:改变this的指向******/
function fn() {
    console.log(this);
}
var obj = {
    name: "zs"
}
fn();//window
fn.bind(obj)();//obj
fn.apply(obj);//obj
fn.call(obj);//obj
3.第二个参数传参
/******part2:bind,call和apply的参数*******/
// bind第二个参数给对象传参(会覆盖原函数的参数)
    function Cat() {
        this.name = 'zs';
        this.say = function(age, sex) {
            console.log(this.name, age, sex);
        }
    }
    function Mouse(name) {
        this.name = name
    }
    const cat = new Cat()
    const mouse = new Mouse('Tom')
    cat.say.bind(mouse, 28, '男')();
    cat.say.call(mouse, 28, '男');
    cat.say.apply(mouse, [28, '男']);
4.知识点

2022-04-29 【总结】this指针总结
2021-05-15 arguments对象的概念和方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值