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的指向
有几种常用且清晰的方式:
酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描
立即学习“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的关键不是死记规则,而是盯住“调用那一刻发生了什么”。









