讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

updream

一键生成高质量推广成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

javascript类如何定义_ES6类与传统构造函数有何不同?

秋宇酱_7919

秋宇酱_7919

发布时间:2026-01-08 20:18:01

|

892人浏览过

|

来源于php中文网

原创

ES6 class本质是构造函数的语法封装,底层仍基于function和prototype,不支持提升,存在TDZ,内部默认严格模式,方法不可枚举,子类constructor必须先调用super()才能访问this。

javascript类如何定义_es6类与传统构造函数有何不同?

ES6 class 本质仍是构造函数,不是新语法糖

ES6 的 class 关键字没有引入新的面向对象机制,它只是对已有原型链继承模式的语法封装。底层依然依赖 function 和 prototype,class 声明会被编译为立即可执行的构造函数(在严格模式下),但**不能被提升(hoisted)** —— 这是和传统 function 声明最直观的区别。

常见错误现象:ReferenceError: Cannot access 'MyClass' before initialization,因为 class 是「暂时性死区(TDZ)」行为,即使写成 class MyClass {},也不能在声明前使用。

  • class 内部默认启用严格模式,无法通过 arguments 或 with 等非严格特性
  • 类体中所有方法都是不可枚举的(Object.keys(MyClass.prototype) 不会返回 constructor 或实例方法)
  • 类名在类内部是只读绑定,不能在 constructor 中重新赋值 this.constructor = XXX

constructor 必须显式调用 super() 才能访问 this

在子类 constructor 中,若未调用 super(),直接访问 this 会抛出 ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor。这不是可选建议,而是强制约束。

原因在于:子类实例的内存空间需由父类构造器初始化(尤其是涉及 [[Prototype]] 链和内部插槽时),super() 才真正创建了 this 绑定。

立即学习“Java免费学习笔记(深入)”;

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • 即使父类没有定义 constructor,也必须写 super(),否则报错
  • super() 必须在访问 this 之前调用,哪怕只是 console.log(this)
  • 若需传参给父类,super(...args) 必须与父类 constructor 参数签名匹配

静态方法、实例方法与原型方法的归属差异

ES6 类中定义的方法默认归属不同对象,直接影响调用方式和继承行为:

  • static method() {} → 挂在类本身上(MyClass.method),不被实例继承,也不参与原型链查找
  • method() {}(无 static)→ 挂在 MyClass.prototype 上,是实例方法,可被子类原型继承
  • 类体内不能直接写 MyClass.prototype.xxx = ... 或 this.xxx = ...,这些属于运行时操作,不在类声明语法范围内

注意:箭头函数不能用作类方法(包括 static),因为它没有自己的 this 绑定,且无法作为构造器;若硬写,会报 SyntaxError: Method has no body。

继承时 super 不仅是调用父构造器,还能访问父级方法

super 在子类中既是关键字,也是绑定到父类原型的引用。除了 super(),还可写作 super.methodName() 来调用父类原型上的同名方法——这在重写方法时做「增强而非替换」非常关键。

但要注意:这种调用必须发生在已初始化 this 之后(即 super() 已执行),且不能在静态方法中用 super 访问实例方法(反之亦然)。

class Animal {
  speak() { return "Animal speaks"; }
}
class Dog extends Animal {
  speak() {
    return super.speak() + " — but as a dog";
  }
}
new Dog().speak(); // "Animal speaks — but as a dog"

容易忽略的一点:super 的绑定是动态的,取决于当前调用栈中的 this 和原型链,而不是声明时的词法作用域。这意味着通过 call/apply 改变 this 后再调用 super.xxx(),仍按 this 当前的原型链向上找父类方法。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

305

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

406

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

395

2025.12.24

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

7675

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

382

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

384

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

263

2026.04.17

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6907

2023.07.18

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

80

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn