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确定了,则将不再发生改变!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值