简单了解 this 指向问题

this 关键字

1.1 在对象方法中,this 表示该方法所属的对象

在这里插入图片描述

1.2 如果单独使用,this 表示全局对象

在浏览器中,this 表示 Window 对象

在这里插入图片描述

在 Node 环境,this 表示 Global 对象

在这里插入图片描述

1.3 在函数中,this 表示全局对象

在这里插入图片描述

1.4 严格模式下,在函数中,this 是未定义的(undefined)

在这里插入图片描述

1.5 在事件中,this 表示接收事件的元素

在这里插入图片描述

1.6 call() 和 apply() 方法可以将 this 引用到任何对象

在这里插入图片描述

call()apply() 将对象 person1getUserName方法中的 this 引用到 person2 中,也就是说,此时 getUserName 中的 this 指向的是 person2,而不是 person1

1.7 构造函数中的 this

在这里插入图片描述

new Person() 时,会创建一个新的对象,此时构造函数 Person 中的 this就指向了新的对象

1.8 总结(Your Donot Know JS)

this 是 JS 中的动态作用域机制,具体来说有四种,优先级由低到高分别如下:

  • 默认的 this 绑定,就是说,在一个函数中使用了 this,但是没有为 this 绑定对象,这种情况下,非严格模式下,this 就是全局变量(如 1.2 和 1.3),严格模式下,thisundefined(如 1.4)。
  • 隐式绑定:使用 userInfo.getUserName() 这样的语法来调用函数的时候,函数 getUserName 中的 this 绑定到 userInfo 对象(如 1.1)。
  • 显示绑定:person1.getUserName.call(person2, ...)person1.getUserName.apply(person2, [...]) 这样的语法时,getUserName 中的 this 绑定到 person2 对象(如 1.6)。
  • 构造绑定:new person(),这种情况,无论 person 是否做了绑定,都要创建一个新的对象,然后 person 中的 this 指向了这个新的对象(如 1.7)。

参考资料:

https://juejin.cn/post/6844903511868571656

http://www.ruanyifeng.com/blog/2018/06/javascript-this.html

https://note.youdao.com/ynoteshare1/index.html?id=b2fab3b044aa90033395df0c8c9ca3a4&type=note

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值