JavaScript中class类介绍

news2024/9/28 11:18:29

在JavaScript中,class 关键字自ES6(ECMAScript 2015)起被引入,作为基于原型的继承的更清晰、更易于理解的语法糖。它允许你通过类(class)和构造函数(constructor)来创建对象,并通过类的方法(methods)和属性(properties)来定义对象的行为和状态。以下是对class的详细介绍和各种示例说明。

基本语法

class ClassName {  
  constructor(props) {  
    // 构造函数,实例创建时自动调用  
    this.property = props;  
  }  
  
  methodName(args) {  
    // 方法,可以访问类的属性和其他方法  
    // ...  
  }  
  
  get propertyName() {  
    // getter,访问属性时使用  
    // ...  
  }  
  
  set propertyName(value) {  
    // setter,设置属性值时使用  
    // ...  
  }  
  
  // 可以使用 static 关键字定义静态方法  
  static staticMethodName(args) {  
    // 静态方法,不需要实例化类就可以调用  
    // ...  
  }  
}

示例

示例 1: 基本类和实例
class Person {  
  constructor(name, age) {  
    this.name = name;  
    this.age = age;  
  }  
  
  greet() {  
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);  
  }  
}  
  
const person1 = new Person('Alice', 30);  
person1.greet(); // 输出: Hello, my name is Alice and I am 30 years old.
示例 2: Getter 和 Setter
class User {  
  constructor(name) {  
    this._name = name;  
  }  
  
  get name() {  
    return this._name.toUpperCase();  
  }  
  
  set name(value) {  
    if (value.length < 3) {  
      throw new Error('Name must be at least 3 characters long');  
    }  
    this._name = value;  
  }  
}  
  
const user = new User('bob');  
console.log(user.name); // 输出: BOB  
  
user.name = 'al'; // 抛出错误  
user.name = 'Alice';  
console.log(user.name); // 输出: ALICE
示例 3: 静态方法
class MathUtils {  
  static add(a, b) {  
    return a + b;  
  }  
  
  static multiply(a, b) {  
    return a * b;  
  }  
}  
  
console.log(MathUtils.add(2, 3)); // 输出: 5  
console.log(MathUtils.multiply(2, 3)); // 输出: 6
示例 4: 继承
class Animal {  
  constructor(name) {  
    this.name = name;  
  }  
  
  speak() {  
    console.log(`${this.name} makes a noise.`);  
  }  
}  
  
class Dog extends Animal {  
  speak() {  
    console.log(`${this.name} barks.`);  
  }  
}  
  
const myDog = new Dog('Buddy');  
myDog.speak(); // 输出: Buddy barks.

在上面的示例中,Dog 类通过 extends 关键字继承了 Animal 类的属性和方法,并且重写了 speak 方法以提供特定于狗的行为。

示例 5: 多态

多态性允许我们以统一的接口来处理不同的对象类型。在JavaScript中,多态性通常通过方法的重写和函数的参数多态性(即函数可以接受不同类型的参数)来实现。

然而,由于JavaScript的动态类型和原型继承机制,多态性在JavaScript中表现得更加自然和灵活。我们不需要显式地声明接口或类型,而是可以基于对象的实际类型来调用方法。

class Shape {  
  draw() {  
    console.log('Drawing a shape...');  
  }  
}  
  
class Circle extends Shape {  
  draw() {  
    console.log('Drawing a circle...');  
  }  
}  
  
class Square extends Shape {  
  draw() {  
    console.log('Drawing a square...');  
  }  
}  
  
function drawShape(shape) {  
  shape.draw(); // 这里体现了多态性:draw方法的具体实现取决于shape的实际类型  
}  
  
const circle = new Circle();  
const square = new Square();  
  
drawShape(circle); // 输出: Drawing a circle...  
drawShape(square); // 输出: Drawing a square...

在这个例子中,drawShape函数接受一个Shape类型的参数,但由于多态性,它可以接受CircleSquare的实例,并调用它们各自的draw方法。这就是多态性在JavaScript中的体现。

这些示例展示了JavaScript中class的基本用法,包括如何定义类、实例化对象、使用getter和setter、定义静态方法以及如何通过继承来扩展类的功能。这些特性使得JavaScript成为一种强大且灵活的面向对象编程语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode题练习与总结:搜索二维矩阵 Ⅱ--240

一、题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],…

详细解析msyql和消息队列数据一致性问题

目录 前言 保持系统数据同步&#xff08;双写问题&#xff09; 消息队列消息丢失的问题 总结 前言 在当今互联网飞速发展的时代&#xff0c;随着业务复杂性的不断增加&#xff0c;消息队列作为一种重要的技术手段&#xff0c;越来越多地被应用于各种场景。它们不仅能有效解…

ChatGPT-o1用来进行数据分析,对比效果很惊人!

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 在进行数据分析的时候&#xff0c;通常有一个场景&#xff1a;我有一批数据&#xff0c;但是不知道该怎么分析&#xff0c;才能找到写论文的突破口和角度。ChatGPT能不能给我一…

Java项目实战II基于Java+Spring Boot+MySQL的厨艺交流平台设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在美食文化…

江协科技STM32学习- P20 实验-TIM编码器接口测速

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程

一、前言 游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程 软件为绿色免安装版&#xff0c;解压即可使用。 二、软件程序教程 计时的时候&#xff0c;点击 开始计时按钮 开台后可设置定时语音提醒的时间 时间设置好后&#xff0c;点击 开启提醒 即可 三、…

无人机飞手入伍当兵技术优势分析

随着现代战争形态的不断演变&#xff0c;无人机技术在军事领域的应用日益广泛&#xff0c;成为提升军队作战能力的重要手段。对于无人机飞手而言&#xff0c;其专业技能和实战经验在入伍当兵后能够转化为显著的技术优势&#xff0c;为国防事业贡献重要力量。以下是从专业技能优…

“不关心⚠️Warning”的代价:http自动升级https导致免费的存储服务扣费

背景 7 月 12 日的时候我手机突然收到一条短信&#xff1a;显示我在 LeanCloud 平台的账户欠费了。虽然只是欠费 0.01 元&#xff0c;但还是有些疑惑&#xff0c;怎么免费的存储服务突然扣费了&#xff1f; 然而这只是个开始。起初我并没有很在意这扣费的 0.01 元&#xff08;…

阿里发布Qwen2.5:编程与数学的AI新革命!

阿里发布Qwen2.5&#xff1a;编程与数学的AI新革命&#xff01; 阿里发布了Qwen2.5系列模型&#x1f680;&#xff0c;带来编程和数学领域的超强升级&#x1f9b8;‍♂️。多种规格可选&#xff0c;开源模型推动创新&#x1f513;&#xff0c;让AI助手更智能&#xff01;快来体…

一阶低通滤波器Simulink仿真测试

1、低通滤波器(SMART PLC双线性变化和后向差分对比测试 低通滤波器(SMART PLC双线性变换和后向差分对比测试)_后向差分 和 双线性-CSDN博客文章浏览阅读367次。该博客详细探讨了低通滤波器的设计,对比了SMART PLC中的双线性变换和后向差分法。内容包括Tustin变换公式、后向差…

第一批学习大模型的程序员,已经碾压同事了,薪资差距都甩出一条街了...

前言 随着人工智能技术的突飞猛进&#xff0c;AI大模型已成为引领未来的核心技术。从ChatGPT的横空出世到GPT-4o的震撼发布&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。 在这场AI革命中&#xff0c;企业对AIGC人才的需求正以指数级增长。据《AIGC就业趋…

基于Hive和Hadoop的病例分析系统

本项目是一个基于大数据技术的医疗病历分析系统&#xff0c;旨在为用户提供全面的病历信息和深入的医疗数据分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…

OpenAi_Moderation审核更新

更新原文档 最新openai-python版本已不可直接用 openai.Moderation.create()

芝法酱学习笔记(0.5)——使用jenkins做自动打包

前言 上节讲了SpringBoot上的打包。但这些过程都是手动的&#xff0c;在实际的开发测试时&#xff0c;自动化的打包部署&#xff0c;可以大大提升团队开发的效率 一、去官网下载 1.1 官网安装命令 对于如何安装的问题&#xff0c;我向来推荐官网 wget -O /usr/share/keyri…

论文阅读:LM-Cocktail: Resilient Tuning of Language Models via Model Merging

论文链接 代码链接 Abstract 预训练的语言模型不断进行微调&#xff0c;以更好地支持下游应用。然而&#xff0c;此操作可能会导致目标领域之外的通用任务的性能显著下降。为了克服这个问题&#xff0c;我们提出了LM Cocktail&#xff0c;它使微调后的模型在总体上保持弹性。…

解决Mac 默认设置 wps不能双面打印的问题

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 使用mac电脑的时候&#xff0c;发现wps找不到双面打印的按钮&#xff0c;导致使用wps打开的所有文件都不能自动双面打印 问题解决&#xff1a; mac的wps也是有双面打印的选项&#xff0c;只是默认被关…

双指针算法【算法 18】

双指针算法 在算法设计与实现中&#xff0c;双指针算法是一种非常高效且常用的技术&#xff0c;尤其适用于处理数组和字符串相关的问题。通过维护两个指针&#xff08;通常称为“快指针”和“慢指针”&#xff09;&#xff0c;双指针算法能够在对数组或字符串进行单次遍历的同时…

VSCode rust文件中的api点击无法跳转问题

如果配置了vscode的setting.json windows端的话 "settings": { "typescript.tsc.autoDetect": "off","rust-analyzer.linkedProjects": [".\\gui-btn\\Cargo.toml",".\\temp\\Cargo.toml", ],其他端类似 能不…

电脑怎么进行网页限制操作?

1、修改Hosts文件&#xff1a; 打开文件资源管理器&#xff0c;导航至C:\Windows\System32\drivers\etc\目录&#xff08;注意&#xff0c;修改前最好备份原文件&#xff09;。 找到并打开hosts文件&#xff0c;以管理员身份运行文本编辑器进行编辑。 在文件末尾添加一行&am…

基于Springboot投稿和稿件处理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…