this指向有明确判断路径:先看是否箭头函数(沿用外层普通函数this),再看调用方式(有“点”则为点前对象,无点则默认绑定),new优先级最高,bind/call/apply次之,隐式和默认绑定最低。

this 指向不是靠猜,而是有明确判断路径的——只要按顺序检查调用方式,90% 的情况能当场锁定。
箭头函数的 this 为什么总是“不听话”?
因为箭头函数没有自己的 this,它直接沿用外层第一个普通函数作用域里的 this 值,且无法被 call/apply/bind 或 new 改变。
- 外层没普通函数(比如直接写在全局)→
this指向window(非严格模式)或undefined(严格模式) - 外层是对象方法 → 箭头函数的
this就等于那个对象方法里的this,哪怕你把它赋值给变量再调用也一样 - 常见误用:
obj.fn = () => { console.log(this) },此时this和obj无关,只看定义时外层是谁
普通函数里 this 指向谁?看调用时有没有“点”
核心就一条:obj.method() 有“点”,this 是 obj;fn() 没“点”,this 是全局(非严格)或 undefined(严格)。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
obj.method()→this是obj -
const fn = obj.method; fn()→ “点”没了,this回归默认绑定 -
obj.child.method()→ 只看紧挨着函数名左边的child,不是obj - DOM 事件中:
btn.onclick = handler→handler被btn调用,this是btn元素
call/apply/bind 和 new 谁优先级更高?
new 优先级最高,其次是 call/apply/bind,最后才是隐式(点调用)和默认绑定。
立即学习“前端免费学习笔记(深入)”;
-
new fn().method.call(obj)→ 先new出实例,method的this是该实例,call(obj)对method生效,但不会影响构造过程 -
fn.bind(obj)()→bind已固定this为obj,后续再call也无效 -
new (fn.bind(obj))()→ 这里bind失效,new强制把this指向新实例,obj被忽略
真正容易翻车的地方,往往不在规则本身,而在于“你以为是点调用,其实已经断开了上下文”——比如把对象方法赋值给变量、传进 setTimeout、作为回调传给第三方库。这些地方的 this 不是你写的那一刻决定的,而是执行那一刻才拍板的。


















