this指向及bind、call、apply函数

2018-11-07  本文已影响0人  箩篼

在JavaScript的每一个函数中都有一个this关键字

    function test() {
        // 由于test函数是window调用的
        // 所以test函数中的this就是window
        console.log(this);
        console.log("test");
    }
    test(); // Window
    window.test(); // Window
        var obj = {
        name: "lnj",
        age: 18,
        say: function () {
            // 由于say方法是通过obj对象来调用的, 所以say方法中的this就是obj对象
            console.log(this);
        }
    };
    obj.say()     //Object

     //不同方式创建的都一样
    function Person() {
        this.name = "lnj";
        this.say = function () {
            // console.log("say");
            console.log(this);
        }
    }
    var p = new Person();
    p.say();  //Person {name: "lnj", say: ƒ}

如何修改this指向

     var obj = {
        name: "zq"
    };
    // 定义一个函数
    function test(a, b) {
        console.log(a, b);
        console.log(this);
    }
    // test(); // windows.test();

    // 会将test函数内部的this改为, 我们传递的对象, 然后返回一个修改之后的函数给我们
    var fn = test.bind(obj, 10, 20);   //返回一个函数,下一行调用
    fn();  //10 20  {name: "zq"}  
    var obj = {
        name: "zq"
    };

    // 定义一个函数
    function test(a, b) {
        console.log(a, b);
        console.log(this);
    }
    // 会将test函数内部的this改为, 我们传递的对象, 并且调用test函数,相当于传递的对象调用了test函数
    test.call(obj, 10, 20);   //10 20   {name: "zq"}
//作用和call相同
    var obj = {
        name: "zq"
    };

    // 定义一个函数
    function test(a, b) {
        console.log(a, b);
        console.log(this);
    }
    test.apply(obj, [10, 20]);

以上三个方法都是专门用于修改函数内部的this的

上一篇 下一篇

猜你喜欢

热点阅读