当前位置: 首页 > ai >正文

JavaScript 中的类(Class)语法

JavaScript 的类语法是 ES6 (ECMAScript 2015) 引入的,它提供了一种更清晰、更接近传统面向对象语言的方式来创建对象和处理继承。虽然 JavaScript 本质上仍然是基于原型的语言,但类语法提供了更直观的语法糖。

基本类定义

javascript

复制

下载

class Person {// 构造函数constructor(name, age) {this.name = name;this.age = age;}// 方法greet() {console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);}
}// 使用类
const person = new Person('Alice', 30);
person.greet(); // 输出: Hello, my name is Alice and I'm 30 years old.

类的主要特性

1. 构造函数

  • 使用 constructor 方法定义

  • 在创建类实例时自动调用

  • 用于初始化对象属性

2. 方法

  • 类中定义的方法会自动添加到类的原型上

  • 方法之间不需要逗号分隔

3. 静态方法

  • 使用 static 关键字定义

  • 只能通过类本身调用,不能通过实例调用

javascript

复制

下载

class MathUtils {static square(x) {return x * x;}
}console.log(MathUtils.square(5)); // 25

4. 类的继承

  • 使用 extends 关键字实现继承

  • 子类可以通过 super 调用父类的构造函数和方法

javascript

复制

下载

class Student extends Person {constructor(name, age, grade) {super(name, age); // 调用父类构造函数this.grade = grade;}study() {console.log(`${this.name} is studying in grade ${this.grade}.`);}
}const student = new Student('Bob', 18, 12);
student.greet(); // 继承自Person的方法
student.study(); // 输出: Bob is studying in grade 12.

5. Getter 和 Setter

  • 可以定义属性的访问器

javascript

复制

下载

class Rectangle {constructor(height, width) {this.height = height;this.width = width;}get area() {return this.height * this.width;}set sideLength(value) {this.height = value;this.width = value;}
}const rect = new Rectangle(5, 10);
console.log(rect.area); // 50 (getter)
rect.sideLength = 7;    // setter
console.log(rect.area); // 49

6. 私有字段(ES2022)

  • 使用 # 前缀定义私有字段

  • 只能在类内部访问

javascript

复制

下载

class Counter {#count = 0; // 私有字段increment() {this.#count++;}getCount() {return this.#count;}
}const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 1
console.log(counter.#count); // 报错: Private field '#count' must be declared in an enclosing class

类与传统构造函数的区别

虽然类语法看起来与传统构造函数不同,但底层实现仍然是基于原型的:

javascript

复制

下载

// 传统构造函数
function Person(name) {this.name = name;
}
Person.prototype.greet = function() {console.log(`Hello, ${this.name}`);
};// 类语法
class Person {constructor(name) {this.name = name;}greet() {console.log(`Hello, ${this.name}`);}
}

类语法的主要优势在于:

  1. 语法更简洁直观

  2. 内置继承支持

  3. 更清晰的静态方法定义

  4. 更好的代码组织和可读性

注意事项

  1. 类声明不会被提升(与函数声明不同)

  2. 类中的所有代码默认在严格模式下执行

  3. 类的方法不可枚举(与通过原型添加的方法不同)

  4. 调用类必须使用 new 关键字,否则会抛出错误

JavaScript 的类语法使得面向对象编程更加直观,特别是对于有其他面向对象语言经验的开发者来说更容易上手。

http://www.xdnf.cn/news/2544.html

相关文章:

  • Vue 组件通信方式总览
  • OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
  • Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 使用POI和EasyExcel使用导入
  • 实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析
  • 2025系统架构师---基于规则的系统架构风格‌
  • 【硬件系统架构】哈佛架构
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 媒体查询使用
  • 《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
  • 无刷空心杯电机及机器人灵巧手的技术解析与发展趋势
  • 关系型数据库的SQL语句
  • Paramiko 完全指南
  • 2. 第一个网页:前端基础入门
  • MySQL 表的约束(二)
  • 数据结构*栈
  • 微信小程序连续多个特殊字符自动换行解决方法
  • DSP48E2 的 MAC模式功能仿真
  • C#与SVN的深度集成:实现版本控制自动化管理​
  • 【星海出品】K8S调度器leader
  • 如何验证二叉搜索树(BST):Java实现详解
  • C++ 可调用实体 (详解 一站式)
  • 我的HTTP和HTTPS
  • Mariadb 防火墙服务器和端口:mysql | 3306
  • 如何实现Kafka的Exactly-Once语义?
  • 关于kafka
  • 突破JVM边界:类加载三重门与栈帧的生存法则
  • 如何搭建spark yarn 模式的集群集群。
  • 如何在idea中写spark程序