this 指向运行时调用函数的对象,由调用方式决定:普通调用指向全局对象,对象方法调用指向点号左侧对象,箭头函数继承外层this,call/apply/bind可显式绑定,构造函数中指向新实例。
this 指向当前执行上下文中的“调用者对象”,不是定义时决定的,而是运行时根据函数如何被调用动态确定的。它不绑定函数本身,也不由作用域决定,只看函数调用的“方式”。
直接调用函数(如 fn()),this 指向全局对象(浏览器中是 window,Node.js 中是 global)。
当函数作为对象的属性被调用(如 obj.method()),this 指向该对象(即点号左边的对象)。
obj.inner.fn() 的 this 指向 inner
用 new 调用函数时,this 指向新创建的实例;class 中的普通方法,默认 this 指向实例(但需注意绑定问题)。
setTimeout(obj.fn, 100)),this 会丢失,需手动绑定(bind、箭头函数或事件处理器中用 handleClick = () => {})call、apply、bind 可显式指定 this 值;而箭头函数的 thi
s 是词法继承的,声明时就固定,无法被任何调用方式或 bind 改变。
bind 返回的新函数,this 被永久锁定,后续 call 也无法覆盖arr.map(x => this.name)
基本上就这些。理解 this 的关键是盯住“谁在调用”,而不是“谁定义了它”。