0

0

javascript中的类是什么_它与构造函数有何关系?

紅蓮之龍

紅蓮之龍

发布时间:2025-12-30 19:16:02

|

408人浏览过

|

来源于php中文网

原创

JavaScript中的类是构造函数的语法糖,底层仍基于原型链;constructor即构造函数本体,方法默认定义在prototype上且不可枚举,extends和super本质仍是原型继承。

javascript中的类是什么_它与构造函数有何关系?

JavaScript 中的类(class)本质上是构造函数的语法糖,它不引入新的面向对象机制,而是为原型继承提供了一种更清晰、更接近传统面向对象语言(如 Java、C++)的写法。类的底层依然依赖函数和原型链,与构造函数在运行时行为完全一致。

类就是构造函数的包装

当你定义一个 class,JavaScript 引擎会把它编译成一个常规函数,并自动设置其 prototype 属性。例如:

以下两种写法在功能和执行结果上完全等价:

构造函数写法:

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

function Person(name) {
  this.name = name;
}
Person.prototype.sayHello = function() {
  return `Hello, I'm ${this.name}`;
};

类写法:

class Person {
  constructor(name) {
    this.name = name;
  }
  sayHello() {
    return `Hello, I'm ${this.name}`;
  }
}

两者创建的实例、原型方法、instanceof 判断、甚至 typeof Person 都返回 "function"

Vondy
Vondy

下一代AI应用平台,汇集了一流的工具/应用程序

下载

constructor 方法就是构造函数本体

类中必须有一个 constructor 方法(若省略,引擎会自动插入空的构造函数)。它会在 new 实例化时被调用,作用和传统构造函数一模一样:

  • 初始化实例属性(如 this.name
  • 可接受参数并进行校验或处理
  • 必须显式调用 super()(如果继承自父类)

注意:constructor 不是“类的构造器”,它只是类定义中用于初始化的特殊方法;真正的构造行为仍由 new 操作符触发,背后仍是函数调用 + 原型绑定。

类的方法默认不可枚举,且不挂载到实例上

类中定义的普通方法(如 sayHello())会自动添加到类的 prototype 上,且 enumerablefalse —— 这和手动给 Function.prototype 添加方法效果一致,但比手写 Object.defineProperty 更简洁。

对比之下,如果在构造函数里直接写 this.sayHello = function(){...},方法会作为实例属性存在,浪费内存且无法被所有实例共享。

继承关系也基于原型链

extendssuper 并没有改变 JavaScript 的继承本质:

  • class B extends A 等价于 B.prototype.__proto__ = A.prototype(现代环境用 Object.setPrototypeOf 实现)
  • super() 在子类 constructor 中调用父类构造函数,相当于 A.call(this, ...args)
  • 静态方法(static)则直接挂在类函数本身上,即 B.method === B.prototype.constructor.method

所以,class 只是让原型继承的代码更易读、更少出错,不是新范式。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 面向对象
go语言 面向对象

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

58

2025.09.05

java面向对象
java面向对象

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

63

2025.11.27

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

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

58

2025.09.05

java面向对象
java面向对象

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

63

2025.11.27

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

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

58

2025.09.05

java面向对象
java面向对象

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

63

2025.11.27

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

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

891

2024.01.03

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

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

32

2025.12.06

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

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

26

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号