javascript ES6的类(class)如何使用?【教程】
发布时间 - 2026-02-01 00:00:00 点击率:次ES6的class是语法糖,基于原型继承;用class声明、constructor初始化;不提升;需用extends和super()实现继承;私有成员用#前缀;类字段在super()后初始化。
ES6 的 class 不是新对象模型,只是语法糖——它背后仍是基于原型的继承,不能替代对 prototype 和构造函数的理解。
如何定义一个基础类?
用 class 关键字声明,内部用 constructor 定义初始化逻辑。注意:类声明不会被提升(hoisted),必须先声明后使用。
常见错误:ReferenceError: Cannot access 'MyClass' before initialization —— 就是因为把它当成了 function 声明来用了。
-
constructor是可选的;没写时会默认提供一个空构造函数 - 类体中只能写方法(含
get/set)、静态方法(static)和字段(public 或 #private),不能写语句或表达式 - 类名在类内部可通过
constructor.name获取,但不能直接用类名递归调用自身(比如在constructor里写new MyClass()会报错,除非类名已存在且在作用域外)
怎么实现继承?extends 和 super() 必须一起用
子类构造函数中若定义了 constructor,就必须显式调用 super(),否则会报 ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor。
原因:super() 负责初始化 this,不调就无法访问实例属性。
-
super()必须在this之前调用,哪怕只调一次 -
super也可作为对象调用父类方法:super.methodName() - 静态方法也能被
extends继承,但需通过super在子类静态方法中调用父类静态方法
私有字段和方法怎么写?用 # 前缀,不是 private 关键字
ES6 没有 private 关键字;真正的私有成员必须以 # 开头,且只能在类内部访问。试图从外部读写 obj.#field 会直接报 SyntaxError 或 TypeError。
注意:# 字段不可枚举、不可代理、不可反射(Reflect.ownKeys() 不返回它们),也不参与 JSON.stringify()。
- 私有方法也必须用
#前缀,且只能被同个类内的其他方法调用 - 不能用字符串拼接绕过:比如
this['#' + 'name']无效 - 私有字段名必须在类定义时就确定,不能动态生成(
#[key]不合法)
类字段(class fields)的陷阱:不在 constructor 里初始化时,顺序很重要
类字段(如 value = 123)会在 constructor 执行前初始化,但它们的执行顺序是自上而下——如果字段依赖尚未声明的变量,就会报 ReferenceError。
例如:foo = this.bar(); bar() { return 'ok'; } 是合法的;但 foo = this.baz; baz = 'ok'; 会出错,因为 baz 还未赋值。
- 字段初始化表达式中可以调用方法,但不能引用尚未声明的字段
- 字段初始化发生在
super()之后、constructor函数体之前 - 如果同时有
constructor和字段初始化,建议把复杂逻辑收进constructor,避免隐式执行顺序问题
真正容易被忽略的是:类不是“类型系统”,TypeScript 的 class 会编译成 ES6 类,但 JavaScript 运行时根本不检查类型;所有 instanceof、typeof、原型链操作,都还是原来那套。别指望 class 自动带来封装或类型安

# javascript
# es6
# java
# js
# json
# typescript
# access
# 作用域
# Static
# 封装
# 父类
# 子类
# 构造函数
# 字符串
# 递归
# 继承
# class
# public
# private
# function
# 对象
# typeof
# constructor
# this
# prototype
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
如何用腾讯建站主机快速创建免费网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
教你用AI将一段旋律扩展成一首完整的曲子
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
网站图片在线制作软件,怎么在图片上做链接?
太平洋网站制作公司,网络用语太平洋是什么意思?
Laravel如何升级到最新版本?(升级指南和步骤)
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何在建站主机中优化服务器配置?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何用PHP快速搭建CMS系统?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
如何在建站宝盒中设置产品搜索功能?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
php结合redis实现高并发下的抢购、秒杀功能的实例
JavaScript如何实现错误处理_try...catch如何捕获异常?
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何为API生成Swagger或OpenAPI文档
高防服务器租用指南:配置选择与快速部署攻略
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
微信小程序 闭包写法详细介绍
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
JavaScript模板引擎Template.js使用详解
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
打造顶配客厅影院,这份100寸电视推荐名单请查收
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
怎样使用JSON进行数据交换_它有什么限制
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel怎么上传文件_Laravel图片上传及存储配置
怎么用AI帮你设计一套个性化的手机App图标?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
北京企业网站设计制作公司,北京铁路集团官方网站?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?

