javascript类是什么?如何用class关键字实现面向对象编程?

来源:3D模型作者:阿里山老登头衔:草根站长
导读:本期聚焦于小伙伴创作的《javascript类是什么?如何用class关键字实现面向对象编程?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《javascript类是什么?如何用class关键字实现面向对象编程?》有用,将其分享出去将是对创作者最好的鼓励。

javascript类是基于原型继承的语法糖,本质上还是通过原型链实现对象之间的关联,class关键字让面向对象编程的代码结构更清晰易读,不需要再手动操作原型对象。它并不是像传统面向对象语言那样存在真正的类概念,只是对原有构造函数写法的封装优化。

javascript类是什么?如何用class关键字实现面向对象编程?

javascript类的核心概念

在ES6之前,javascript通过构造函数和原型对象实现面向对象编程,比如定义一个Person构造函数需要手动给prototype添加方法。而class关键字把构造器、实例方法、静态方法等整合到一个代码块中,语法更符合传统面向对象语言的书写习惯。

需要注意的是,javascript的类声明不会被提升,这和函数声明不同,必须先声明类再使用它创建实例,否则会抛出引用错误。

用class关键字定义基础类

使用class关键字定义类的语法非常简单,类名通常采用首字母大写的驼峰命名法,类内部可以定义constructor构造器、实例方法、静态方法等内容。

定义类和创建实例

下面是一个基础的Person类示例,包含构造器和实例方法:

// 定义Person类
class Person {
  // 构造器,创建实例时自动执行
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  // 实例方法,会被添加到类的原型上
  sayHello() {
    console.log(`你好,我是${this.name},今年${this.age}岁`);
  }

  // 静态方法,直接通过类调用,不需要创建实例
  static createAdult(name) {
    return new Person(name, 18);
  }
}

// 创建实例
const person1 = new Person('张三', 20);
person1.sayHello(); // 输出:你好,我是张三,今年20岁

// 调用静态方法
const person2 = Person.createAdult('李四');
person2.sayHello(); // 输出:你好,我是李四,今年18岁

上述代码中,constructor是类的构造器,用于初始化实例的属性,this指向新创建的实例。sayHello是实例方法,所有实例都可以调用,它实际上被添加到了Person.prototype上。static关键字定义的是静态方法,只能通过Person.createAdult这种形式调用,不能通过实例调用。

类的继承实现

class关键字通过extends关键字实现继承,子类可以继承父类的属性和方法,也可以重写父类的方法或者添加新的方法。

基础继承示例

下面定义一个Student类继承Person类,添加学生特有的属性和方法:

// 定义Student类继承Person类
class Student extends Person {
  constructor(name, age, grade) {
    // 调用父类构造器,必须在使用this之前调用
    super(name, age);
    this.grade = grade;
  }

  // 重写父类的sayHello方法
  sayHello() {
    console.log(`你好,我是${this.name},今年${this.age}岁,在读${this.grade}年级`);
  }

  // 子类特有的实例方法
  study() {
    console.log(`${this.name}正在学习`);
  }
}

// 创建Student实例
const student1 = new Student('王五', 16, 10);
student1.sayHello(); // 输出:你好,我是王五,今年16岁,在读10年级
student1.study(); // 输出:王五正在学习

继承时需要注意,子类的constructor中必须先调用super()才能使用this,super的作用是调用父类的构造器,传入父类需要的参数。如果子类没有定义constructor,会默认生成一个调用super的构造器。

class和传统构造函数写法的对比

class语法本质上是传统构造函数写法的语法糖,下面的表格对比了两种写法的差异:

对比项传统构造函数写法class关键字写法
构造器定义函数本身作为构造器类内部的constructor方法
实例方法定义手动添加到构造函数的prototype上直接在类内部定义方法,自动添加到原型
静态方法定义添加到构造函数本身用static关键字在类内部定义
继承实现手动修改子构造函数的prototype指向父类实例,还要修正constructor指向用extends关键字直接实现,自动处理原型链

可以看到class写法大大简化了面向对象编程的代码量,也减少了手动操作原型容易出现的错误,是现在javascript中实现面向对象编程的主流方式。

类的其他特性

除了基础的定义和继承,class还支持一些其他特性:

  • getter和setter:可以在类内部定义属性的读取和设置逻辑,比如对属性值做校验
  • 私有属性和方法:ES2022之后支持用#开头的属性和方法,只能在类内部访问,外部无法调用
  • 表达式形式定义类:可以把类赋值给变量,或者作为返回值,适合动态创建类的场景

下面是一个使用私有属性和getter/setter的示例:

class BankAccount {
  // 私有属性,只能在类内部访问
  #balance = 0;

  // 余额的getter
  get balance() {
    return this.#balance;
  }

  // 存款的setter
  set deposit(amount) {
    if (amount <= 0) {
      throw new Error('存款金额必须大于0');
    }
    this.#balance += amount;
  }

  // 取款方法
  withdraw(amount) {
    if (amount > this.#balance) {
      throw new Error('余额不足');
    }
    this.#balance -= amount;
  }
}

const account = new BankAccount();
account.deposit = 100; // 调用setter存100
console.log(account.balance); // 调用getter输出100
account.withdraw(50);
console.log(account.balance); // 输出50

通过上述内容可以看出,class关键字让javascript的面向对象编程更加规范易用,开发者不需要再深入理解原型链的复杂细节,也能写出结构清晰的面向对象代码。只要掌握类的定义、继承、静态方法等核心用法,就能满足大部分场景的开发需求。

javascriptclass关键字面向对象编程构造函数修改时间:2026-07-11 14:51:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。