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()他不会立即调用函数。

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

猜你喜欢

转载自blog.csdn.net/weixin_50587417/article/details/120944144