改变this指向,三种call(),bind() ,apply()会区分了嘛,

50 阅读1分钟

// 改变this指向

    // call()   用于改变this指向
    //   第一次参数表示要改变成的那个this指向,后面的参数表示该函数的参数
    //  fn()  ->  fn.call()


    // bind()  用于改变this指向
    //   bind 只会改变this指向,但不会调用函数  -- 返回了这个函数

    // apply()  用改变this指向
    //   apply 的第二个参数必须是一个数组(原函数的参数)

    const obj1 = {
        name : 'yy' ,
        say : function () {  
            console.log(this.name);
        }
    }


    const obj2 = {
        name : 'cc' , 
        say : function () {  
            console.log(this.name);
        }
    }


    obj1.say()  // yy

    obj2.say()  // cc


    obj2.say.call(obj1)  // y


    function fn(n,m) {  
        console.log(n);
        console.log(this);
    }

    fn(3)

    fn.call(document , 4)

    // const res = fn.bind(obj2 , 5)
    // console.log(res);
    // res()

    fn.bind(obj2 , 5)()


    fn.apply(obj1 , [8 , 7])


    function fo(a,b) {  
        console.log(6);
        console.log(a+b);
        console.log(this);
    }

    fo.call(obj1 , 1,2) ;

    fo.apply(obj1 , [1,2])

    fo.bind(obj1 , 1,2)()