javascript中的‘this’是什么_它的指向如何确定【教程】
发布时间 - 2026-01-23 00:00:00 点击率:次普通函数调用时,this在非严格模式下指向window或globalThis,严格模式下为undefined;对象方法赋值后调用会丢失this;箭头函数继承外层this;构造函数需用new调用,否则this指向错误。
JavaScript 中的 this 不是定义时绑定的,而是调用时决定的——它永远指向函数执行时的“当前对象”,但这个“当前对象”并不总是你直觉认为的那个。
普通函数调用时,this 指向谁?
在非严格模式下,全局环境或独立调用函数(如 foo())时,this 指向 window(浏览器)或 globalThis(Node.js);严格模式下则为 undefined。
- 常见错误现象:
console.log(this)在顶层函数里输出Window,但你本意是想访问某个实例属性,结果报Cannot read property 'x' of undefined - 使用场景:工具函数、一次性逻辑封装,但若内部依赖
this,极易出错 - 实操建议:避免在普通函数中依赖
this;如需绑定上下文,显式传参或用箭头函数替代
对象方法中,this 为什么有时突然失效?
当把对象方法赋值给变量或作为回调传入(如 setTimeout(obj.method, 100)),this 会丢失原始绑定,退回到默认规则(即上一条)。
- 典型表现:
obj.method()正常,但const fn = obj.method; fn()报错或访问不到预期属性 - 参数差异:
bind、call、apply可强制指定this,但bind返回新函数,call/apply立即执行 - 实操建议:用
obj.method.bind(obj),或改写为箭头函数(仅适用于不需动态this的场景),更推荐在类中用class fields + arrow function写法(如handler = () => { ... })
箭头函数没有自己的 this,那它怎么找?
箭头函数不创建自己的 this,而是沿作用域链向上查找,继承外层普通函数或全局作用域的 this 值。
- 使用场景:事件回调、定时器、Promise 链内需要保持上下文一致时(如 React 组件中处理点击)
- 容易踩的坑:
Object.prototype上定义的箭头函数无效(语法不允许);构造函数不能是箭头函数(无new.target,也无法用new调用) - 性能影响:无额外
this绑定开销,但过度嵌套可能让this来源变得隐晦难追踪
构造函数和 class 中,this 指向实例,但要注意什么?
new Foo() 或 class 实例化时,this 指向新创建的对象;但若忘记 new 直接调用,就退化成普通函数调用(严格模式下 this 是 u)。
- 常见错误:
Foo()被误调,导致this.x = 1实际挂到全局,或报错 - 实操建议:类方法尽量用 class fields + 箭头函数防丢失;构造函数首字母大写并配合 ESLint 规则
new-cap提示 - 兼容性注意:
class本质仍是函数,但其方法不可枚举(for...in不会遍历到),且不支持函数提升
真正难的不是记住规则,而是意识到:同一个函数,调用方式不同,this 就可能完全不同——而 JavaScript 不会在语法层面警告你这点。调试时多打 console.log(this),比背规则更管用。
# react
# javascript
# java
# js
# node.js
# node
# 浏览器
# app
# 工具
# win
# 作用域
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
原生JS获取元素集合的子元素宽度实例
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
LinuxCD持续部署教程_自动发布与回滚机制
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
如何在VPS电脑上快速搭建网站?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何用5美元大硬盘VPS安全高效搭建个人网站?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何登录建站主机?访问步骤全解析
北京企业网站设计制作公司,北京铁路集团官方网站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
PHP 500报错的快速解决方法
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
创业网站制作流程,创业网站可靠吗?
网站建设要注意的标准 促进网站用户好感度!
EditPlus中的正则表达式 实战(1)
PythonWeb开发入门教程_Flask快速构建Web应用
🚀拖拽式CMS建站能否实现高效与个性化并存?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何正确选择百度移动适配建站域名?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何有效防御Web建站篡改攻击?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何获取PHP WAP自助建站系统源码?
Laravel如何配置和使用缓存?(Redis代码示例)
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel如何实现文件上传和存储?(本地与S3配置)
如何打造高效商业网站?建站目的决定转化率
Laravel集合Collection怎么用_Laravel集合常用函数详解
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
装修招标网站设计制作流程,装修招标流程?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
中山网站推广排名,中山信息港登录入口?
音乐网站服务器如何优化API响应速度?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel如何集成Inertia.js与Vue/React?(安装配置)
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
青岛网站建设如何选择本地服务器?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
上一篇:notepad++显示中文乱码
上一篇:notepad++显示中文乱码

