this

头像
喆喆
    阅读 1 分钟

    这只是写了一个简单的可理解的this,后续可能会写一个复杂点的。


    this

    先看看几个函数调用的场景:

    function foo() {
        console.log(this.a);
    }
    let a = 1;
    foo();
    const obj = {
        a: 2,
        foo: foo
    }
    obj.foo();
    cosnt c = new foo();
    • 对于直接调用foo来说,不管foo函数被放在了什么地方,this一定是window
    • 对于obj.foo()来说,我们只需要记住,谁调用了函数,谁就是this,所以在这个场景下foo函数中的this就是obj对象
    • 对于new的方式来说,this被永远绑定在了c上面,不会被任何方式改变this

    再来看看下面的:

    function a() {
        return () => {
            return () => {
                console.log(this);
            }
        }
    }
    console.log(a()()());

    首先箭头函数其实是没有this的,箭头函数中的this只取决包裹箭头函数的第一个普通函数的this。在这个例子中,因为包裹箭头函数的第一个普通函数是a,所以此时的this是window。另外对箭头函数使用bind这类函数是无效的。
    注:最后种情况也就是bind这些改变上下文的API了,对于这些函数来说,this取决于第一个参数,如果第一参数为空,那么就是window。


    喆喆
    74 声望7 粉丝

    小白一枚!!!


    下一篇 »
    Vue