javascript的class语法如何定义类?【教程】

星晨姑娘_9445

星晨姑娘_9445

2026-01-17

649人浏览

原创

JavaScript类是独立语法结构,需用class关键字声明且必须命名;类体仅允方法定义,默认严格模式;constructor可选但继承时必调super();方法不可枚举,静态方法用static修饰;类非语法糖,具严格构造约束。

javascript的class语法如何定义类?【教程】

class 声明必须用 class 关键字,不能省略

JavaScript 的类不是函数别名,也不是对象字面量,它是一个独立的语法结构。你不能用 const MyClass = class { ... } 以外的方式“赋值式”定义(虽然可以,但那是类表达式,不是声明);而 class MyClass { ... } 是声明,会提升(但不初始化,访问会报 ReferenceError)。

  • 类声明必须有名字,class { ... }(匿名类声明)是语法错误
  • 类体中只能写方法(包括构造器、普通方法、getter/setter、静态方法),不能写字段赋值(如 prop = 1),除非使用 TypeScript 或已进入 Stage 4 的类字段提案(需 Babel 转译)
  • 类内部默认启用严格模式,无需手动写 "use strict"

constructor 方法是可选的,但没写就自动插入空构造器

如果你没显式写 constructor,JS 引擎会隐式添加一个空的 constructor() {}。一旦写了,就必须用 super() 调用父类构造器(如果继承了 extends),否则会报 ReferenceError: Must call super constructor in derived class before accessing 'this'。

  • 子类构造器中,this 在 super() 前不可用
  • constructor 不能是箭头函数,也不能用 function 关键字声明
  • 返回值:显式 return 对象会覆盖新实例;返回原始值(如 return 42)会被忽略,仍返回 this
class Animal {
  constructor(name) {
    this.name = name;
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name); // 必须先调用
    this.breed = breed;
  }
}

方法定义不带 function 关键字,且不可枚举

类中的方法(包括 constructor、普通方法、static 方法、get/set)都是直接写签名,不加 function。这些方法会自动设为不可枚举(enumerable: false),所以 for...in 或 Object.keys() 看不到它们。

Expanso yaml-to-json
Expanso yaml-to-json

使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。

下载
  • 静态方法用 static 修饰,挂在类本身上,而非实例上
  • 实例方法不能用 static,否则调用时会提示 TypeError: MyClass.instanceMethod is not a function
  • 方法名可以是计算属性名,比如 [someVar]() { },但仅限于类表达式或带变量的场景

class 不是“语法糖”,继承行为和函数构造器有本质区别

虽然 class 看起来像函数的包装,但它对 new.target、super、原型链设置、以及子类 constructor 的约束都更严格。直接用函数模拟 class 行为非常困难,尤其涉及 Reflect.construct 或自定义 [[Construct]] 时。

  • 类不能被当作普通函数调用:MyClass() 会抛出 TypeError: Class constructor MyClass cannot be invoked without 'new'
  • 类无法被 call/apply 调用(不像函数构造器)
  • 类的原型方法不能通过 MyClass.prototype.method.call(obj, ...) 绕过 this 检查——因为内部用了 [[HomeObject]] 绑定

真正麻烦的地方在于:你以为只是换种写法,其实 JS 引擎对 class 做了额外检查。哪怕只漏掉一个 super(),或者在非子类里误写 super(),都会立刻中断执行。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

2026.02.13

332

17

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

2026.02.25

540

17

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

2026.03.13

411

19

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

2026.06.03

326

29

TypeScript Node.js 全栈工程化与Monorepo架构实践
TypeScript Node.js 全栈工程化与Monorepo架构实践

本专题围绕 TypeScript 在 Node.js 全栈开发中的工程化实践展开,系统讲解 Monorepo 架构设计、包管理策略、模块复用机制以及服务端与前端统一类型系统的构建方法。通过真实项目案例,帮助开发者提升大型全栈项目的可维护性与协作效率。

2026.06.16

758

8

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

2458

7

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

2024.01.03

4636

7

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

2025.12.06

326

9

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

5016

8

热门下载

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

精品课程

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

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习