news 2026/4/18 9:05:30

ES6 中的 class 是什么?和ES5构造函数差别是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ES6 中的 class 是什么?和ES5构造函数差别是什么?

文章目录

  • ES6 中的 class 是什么?和ES5构造函数差别是什么?
    • 1.ES6 class
    • 2.ES6 class 和 ES5 函数构造函数函数 (constructor function) 的差別
    • 3.class 的常见方法
      • 3.1 继承
      • 3.2 static静态方法
      • 3.3 Private fields

ES6 中的 class 是什么?和ES5构造函数差别是什么?

1.ES6 class

ES6 class 的心智模型与 C++ / Java 等传统class-based 语言是一致的class-based 语言是一致的

JavaScript 在 ECMAScript 6 (ES6) 之前并没有 class 的语法,而是会通过函数构造函数创建对象,再通过 new 关键字实例。

在 ES6 时引入了 class 的概念,JavaScript class 使用的语法 class 类似于其他 OOP 语言中的 class,但 JavaScript 的 class 是一种语法糖,本质上和其他程序语言 class 的实践方式不一样,JavaScript 的 class 是通过原型继承来模拟 class 的行为。如下面示例:

class 方法:

classCar{constructor(brand,model){this.brand=brand;this.model=model;}drive(){console.log(`Driving a${this.brand}${this.model}`);}}constmyCar=newCar("Tesla","Model 3");myCar.drive();// Driving a Tesla Model 3

class 方法之前:

functionCar(brand,model){this.brand=brand;this.model=model;}Car.prototype.drive=function(){console.log(`Driving a${this.brand}${this.model}`);};constmyCar=newCar("Tesla","Model 3");myCar.drive();// Driving a Tesla Model 3
ES6 之前,我们会通过函数实现相同功能,而在 ES6 版本中的实现方法,Car class 中的 drive 方法并不是在 class 内部里封装的方法,背后其实是赋值到了 Car 的原型 (prototype) 上而已。

2.ES6 class 和 ES5 函数构造函数函数 (constructor function) 的差別

ES6 class 和 ES5 的构造函数 (constructor function) 主要有数个差別:

1.提升 hosting :不同于函数声明的构造函数存在提升,但使用 class 声明则是无法再声明前就使用。

varnewClass=newMyClass();// Uncaught ReferenceError: MyClass is not defined is not definedclassMyClass{}

2.new:class 构造函数必须通过 new 调用,否则会抛出错误。而ES5 的构造函数:不用 new 就只是当普通函数执行。

classAnimal{}consta=Animal();// Uncaught TypeError: Class constructor Animal cannot be invoked without 'new'

3.class 的常见方法

3.1 继承

ES6 的 class 继承是通过使用extends关键字实现的。

假设有一个父 class Animal

classAnimal{constructor(name){this.name=name;}eat(){console.log(`${this.name}eat food.`);}speak(){console.log(`${this.name}makes a noise.`);}}

创建一个子 class Dog,继承 Animal class

classDogextendsAnimal{constructor(name){super(name);}speak(){console.log(`${this.name}barks.`);}}

在这个例子中,Dogclass 继承了Animalclass 的所有属性和方法,也可以重写speak方法。接着,使用Dogclass 创建对象:

constdog=newDog("HAHA");dog.eat();// HAHA eat food.dog.speak();// HAHA barks.

3.2 static静态方法

静态方法不能被对象实例继承,只能通过class 本身调用。这意味着,你不能通过对象调用class 方法,而只能通过class 名本身调用。

如果尝试通过对象实例访问静态方法,将抛出一个错误,因为静态方法不能被继承,只能通过class 本身访问。

classMathHelper{staticadd(a,b){returna+b;}}constmath=newMathHelper();// 当试图通过对象实例访问静态方法,将抛出一个错误console.log(math.add(2,3));// Uncaught TypeError: math.add is not a function// 只能通过 class 本身访问console.log(MathHelper.add(2,3));// 5

3.3 Private fields

可以通过使用前缀#来实现class 的私有领域(Private fields),包括建立私有的属性或是方法,而私有领域只能在class 内部使用,外部无法存取。

如以下程式码,#privateField为私有变数,只能在Example class 中使用,当实例example 尝试直接获取privateField变数时,会报SyntaxError的错误。

classExample{#privateField=100;getPrivateField(){returnthis.#privateField;}}constexample=newExample();console.log(example.getPrivateField());// 100console.log(example.#privateField);// SyntaxError: Private field '#privateField' must be declared in an enclosing class
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:43:23

项目应用:将Batocera游戏整合包部署至Pi 4迷你主机

以下是对您提供的博文内容进行 深度润色与结构重构后的技术博客正文 。全文已彻底去除AI生成痕迹,采用真实嵌入式工程师/复古游戏平台开发者的口吻撰写,语言更自然、逻辑更连贯、重点更突出,并强化了“可操作性”与“经验感”。所有技术细节均严格基于原文信息,未虚构任何…

作者头像 李华
网站建设 2026/4/18 8:13:45

Qwen3-VL-4B Pro保姆级教学:Streamlit热重载开发调试最佳实践

Qwen3-VL-4B Pro保姆级教学:Streamlit热重载开发调试最佳实践 1. 为什么你需要Qwen3-VL-4B Pro——不只是“能看图说话”的模型 很多人第一次听说视觉语言模型,脑子里浮现的可能是“上传一张图,AI说几句话”这种简单交互。但Qwen3-VL-4B Pr…

作者头像 李华
网站建设 2026/4/18 10:07:09

Ollama镜像版translategemma-27b-it:支持RESTful API+WebSocket双协议接入

Ollama镜像版translategemma-27b-it:支持RESTful APIWebSocket双协议接入 你是不是也遇到过这些翻译场景: 看到一张中文产品说明书图片,想立刻知道英文版怎么写?收到客户发来的带表格的PDF截图,需要快速提取并翻译关…

作者头像 李华
网站建设 2026/4/17 19:34:53

Windows 10/11多用户权限影响Multisim数据库访问图解说明

以下是对您提供的技术博文进行 深度润色与工程化重构后的版本 。全文已彻底去除AI生成痕迹,语言更贴近一线工程师/高校实验管理员的真实表达风格;结构上打破传统“引言-原理-方案-总结”的模板化节奏,以 问题驱动、层层剥茧、实战导向 为主线,融合教学逻辑与部署经验,…

作者头像 李华
网站建设 2026/4/17 21:43:16

Lychee多模态重排序模型入门必看:7B参数BF16推理环境配置详解

Lychee多模态重排序模型入门必看:7B参数BF16推理环境配置详解 1. 这不是普通重排序模型,是真正能“看懂图读懂文”的精排利器 你有没有遇到过这样的问题:图文检索系统粗排后返回了20个结果,但其中真正相关的可能只有3个&#xf…

作者头像 李华
网站建设 2026/4/18 8:01:15

DeepSeek-R1-Distill-Qwen-1.5B与原版对比:精度与速度的权衡分析

DeepSeek-R1-Distill-Qwen-1.5B与原版对比:精度与速度的权衡分析 你是否遇到过这样的困扰:想在边缘设备上跑一个数学推理强、响应快的模型,但Qwen2.5-Math-1.5B又太重,显存吃紧、推理慢;而轻量模型又总在关键步骤“掉…

作者头像 李华