JavaScript中this的指向由调用时决定,而非定义时;普通调用指向全局或undefined,对象方法调用指向该对象,构造调用指向新实例,箭头函数继承外层this。

JavaScript中的this不是指向函数本身,也不是定义时绑定的,而是**调用时决定的**——它指向函数执行时的“当前对象”,也就是调用该函数的那个对象。
谁调用,this就指向谁
这是最核心的规则。函数怎么被调用,决定了this的值:
普通函数调用:fn() → this 指向全局对象(浏览器中是window,严格模式下是undefined) 对象方法调用:obj.method() → this 指向obj 构造函数调用:new Fn() → this 指向新创建的实例 箭头函数:不绑定自己的this,它沿用外层作用域的this值
常见容易混淆的情况
很多问题出在“调用方式变了,但没意识到this也变了”:
把对象方法赋给变量再调用:const f = obj.method; f(); → 此时this不再是obj,而是全局或undefined 事件回调:btn.onclick = obj.handleClick; → 点击时this是btn元素,不是obj 定时器里直接调用方法:setTimeout(obj.method, 100); → 同样丢失原始this
如何固定this的指向
有几种常用且清晰的方式:
立即学习“Java免费学习笔记(深入)”;
bind():返回一个新函数,this被永久绑定到指定对象,如obj.method.bind(obj) call() 或 apply():立即调用,并显式传入this值,适合一次性的场景 箭头函数:在对象方法内部定义箭头函数,可自然捕获外层this,比如在事件监听或定时器中封装逻辑 ES6 class 中的写法:用类字段语法+箭头函数声明方法(method = () => { ... }),避免绑定问题
快速判断this的小技巧
看函数调用时的“点前面是谁”:
obj.fn() → 点前面是obj,this就是obj fn()(没点)→ 默认绑定,看是否严格模式 fn.call(other) → 显式指定,this就是other new fn() → 构造调用,this是新实例
基本上就这些。理解this的关键不是死记规则,而是盯住“调用那一刻发生了什么”。
以上就是JavaScript中的“this”关键字如何理解?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544124.html
微信扫一扫
支付宝扫一扫