js修改this指向的三种方式

71 阅读1分钟

修改this指向的三种方式 call、apply、bind:这三个方法是function类的实例方法。 call:调用;apply:应用;bind:绑定

        function fn(a, b) {
            console.log(this);
            console.log(a, b);
        }
             console.log(fn instanceof Function); //true
       		 console.log(Function.prototype);
        //直接调用函数,函数内部this指向window。
        fn();
 	    //修改this指向
        var obj2 = {
            name: "obj2"
        }

        //直接调用函数,函数内部this指向window。修改函数内部this指向obj2

        //call:修改this指向并调用函数
        //参数一:this的新值
        //参数二.......:函数执行本来需要的参数
        fn.call(obj2, 10, 20);

        //apply:修改this指向并调用函数
        //参数1:this的新值;
        //参数2: 数组,数组中包含函数执行本来需要的参数
        fn.apply(obj2, [20, 30])

        //bind:修改this指向,但是不会调用函数;会返回this被固化后形成的新函数。
        var fn2 = fn.bind(obj2);
        console.log(fn2);
        fn2(40, 50);