什么是javascript类_如何使用ES6类进行面向对象编程【教程】
发布时间 - 2026-02-02 00:00:00 点击率:次ES6 class是构造函数语法糖,受TDZ限制不可提升;constructor中return对象会覆盖实例;继承内置类须调用super;错误提示本质是原型机制问题。
ES6 的 class 不是新对象模型,只是构造函数的语法糖;直接用它写业务没问题,但想搞懂继承、new 行为或调试原型链时,绕不开背后的函数和 prototype。
为什么 class 声明不能被提升?
因为 class 声明会进入「暂时性死区」(TDZ),和 let/const 一样:在声明前访问会抛出 ReferenceError,而不是 undefined。
-
Foo()调用放在class Foo { ... }前 → 报错ReferenceError: Cannot access 'Foo' before initialization - 而
function Foo() {}可以被提升,调用不会报错 - 如果必须动态加载类,改用
const Foo = class { ... }(类表达式),它可赋值、可传参、不受 TDZ 限制
constructor 里不写 return 就一定返回实例吗?
不一定。显式 return 一个**对象**时,new 表达式会忽略默认实例,直接返回你 return 的那个对象;返回原始值(string、number、null 等)则被忽略,仍返回实例。
class A {
constructor() {
return { x: 1 }; // new A() 得到的是 { x: 1 },不是 A 的实例
}
}
console.log(new A() instanceof A); // false
- 这个行为常被用于实现「单例包装」或「代理构造」,但容易误用导致
instanceof失效 - 多数场景下别
return对象,除非你明确需要覆盖实例创建逻辑
如何正确扩展内置类(比如 Array 或 Error)?
直接 extends Array 是合法的,但要注意:子类构造函数中必须先调用 super(...args),且不能跳过它去手动 return 数组实例 —— 否则长度、索引等内部状态会异常。
class MyArray extends Array {
constructor(...args) {
super(...args); // 必须!否则 length 不更新、push 不生效
}
first() { return this[0]; }
}
-
extends Error同理:必须super(message),否则堆栈信息丢失(err.stack为空) - V8 引擎对内置类子类化有特殊处理,但 Safari 旧版存在兼容问题,生产环境建议加运行时检测
- 不要试图用
class X extends null模拟「无原型对象」——这会报错,应改用Object.create(null)
真正麻烦的不是怎么写 class,而是当遇到 TypeError: Class constructor X cannot be invoked without 'new' 或子类方法拿不到父类私有字段时,得立刻意识到:你在跟 JavaScript 的原型机制和执行上下文较劲,而不是语法本身。
# javascript
# es6
# java
# access
# safari
# 栈
# 面向对象编程
# 为什么
# String
# Array
# Object
# NULL
# 面向对象
# 父类
# 子类
# 构造函数
# Error
# const
# 继承
# 堆
# class
# number
# undefined
# function
# 对象
# constructor
# prototype
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速登录WAP自助建站平台?
如何做网站制作流程,*游戏网站怎么搭建?
微信公众帐号开发教程之图文消息全攻略
如何在云主机上快速搭建多站点网站?
做企业网站制作流程,企业网站制作基本流程有哪些?
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
简单实现Android文件上传
Laravel如何处理异常和错误?(Handler示例)
如何挑选高效建站主机与优质域名?
Laravel如何为API生成Swagger或OpenAPI文档
深圳网站制作平台,深圳市做网站好的公司有哪些?
QQ浏览器网页版登录入口 个人中心在线进入
如何快速搭建高效可靠的建站解决方案?
SQL查询语句优化的实用方法总结
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
潮流网站制作头像软件下载,适合母子的网名有哪些?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
香港服务器选型指南:免备案配置与高效建站方案解析
什么是javascript作用域_全局和局部作用域有什么区别?
利用python获取某年中每个月的第一天和最后一天
lovemo网页版地址 lovemo官网手机登录
如何快速搭建支持数据库操作的智能建站平台?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
免费网站制作appp,免费制作app哪个平台好?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Android利用动画实现背景逐渐变暗
HTML 中动态设置元素 name 属性的正确语法详解
深圳网站制作的公司有哪些,dido官方网站?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Laravel集合Collection怎么用_Laravel集合常用函数详解
装修招标网站设计制作流程,装修招标流程?
Laravel如何处理表单验证?(Requests代码示例)
微信小程序 五星评分(包括半颗星评分)实例代码
大型企业网站制作流程,做网站需要注册公司吗?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Android自定义控件实现温度旋转按钮效果
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
如何在Ubuntu系统下快速搭建WordPress个人网站?
Laravel如何使用Blade模板引擎?(完整语法和示例)
如何在新浪SAE免费搭建个人博客?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
如何在阿里云通过域名搭建网站?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel如何创建自定义Facades?(详细步骤)


