JavaScript中的this

JS中如何正确判断this的指向

  1. 在全局中定义的函数,对于全局中的直接调用,其this指向始终是window对象。

    例如定义函数时:

    function foo(){

    ​ console.log(this.a)

    }

    调用时:

    var a=1;

    foo(); //1

    在这种情况下,调用函数时,a的值就是全局变量中的a

  2. 如果是在对象中定义了函数,则利用对象调用函数,this的指向是调用函数的那个对象。

    例如在对象中定义函数:

    function foo() {

    ​ console.log(this.a)

    }

    obj={

    ​ a: 2,

    ​ foo: foo

    }

    obj.foo(); //2

    这种情况下,哪个对象调用了函数,this就指向该对象。

  3. 如果函数定义是直接用new的方式定义的,则this永远指向定义时那个变量。

    例如函数定义时:

    const b = new foo()

    这种情况下,this的指向将会始终指向b。

  4. 特别注意箭头函数本身是没有this的,由谁第一包裹了箭头函数,箭头函数this就指向包裹函数的this。

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

    此时this的指向为a。

  5. 也可以利用bind改变上下文!此时this取决于bind的第一个参数。注意!如果进行多次bind,this永远由第一次bind所决定。

在这几条规则中,new的优先级是最高的,接下来是bind,再者是对象的调用方式,最后是直接调用。注意,如果箭头函数的this确定了,则将不再发生改变!

以上为个人学习总结,如果有不对的地方,还请大家多多指出来。

你可能感兴趣的:(个人学习总结)