call() apply() bind() 三者的区别

  1. call() 改变指向,也可以用着继承
 let obj1 = {
            name: 'andy'
        }
        function fn1(a, b) {
            console.log(this);
            console.log(a + b);
        }
        //第一个参数为改变指向,后面的参数(多个)都为实参,传给调用者
        fn1.call(obj1, 1, 2);
  1. apply() 改变指向,也可以用于借用Math对象
  let obj2 = {
            name: 'andy'
        }
        function fn2(a, b) {
            console.log(this);
            console.log(a + b);
        }
        //第一个参数为指向,后面的参数以数组的方式传给调用者
        fn2.apply(obj2, [1, 2]);
        //apply 主要应用 比如说我们可以利用apply借助于数学内置对象
        let arr = [1, 5, 8, 6, 4, 2, 7];
        console.log(Math.max.apply(Math, arr));

  1. bind() 改变指向,不调用函数
let obj3 = {
            name: 'andy'
        }
        function fn3(a, b) {
            console.log(this);
            console.log(a + b);
        }
        //不会调用  改变原函数的指向,返回新函数(拷贝)
        let f = fn3.bind(obj3, 1, 2);
        f();

三者的区别:
共同点:
1.第一个参数都是改变this指向。
2.call()和bind()是一样的传参方式。
3.2.call()和bind()立即调用函数。
不同点:
1.apply()传参是使用数组方式来传入实参。
2.bind()他不会立即调用函数。

以上仅为参考,写的不好请多多见谅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值