理解 JavaScript 中的类和继承

理解 javascript 中的类和继承

JavaScript 类与继承详解

JavaScript 类为面向对象编程 (OOP) 提供了现代化的语法支持,涵盖继承、封装和多态等核心概念。本文将深入探讨 JavaScript 类和继承的创建、使用方法以及高级应用。

1. JavaScript 类

ES6 引入了 class 关键字,使类的定义更加清晰简洁。

类定义语法:

class 类名 {  构造函数() {    // 初始化代码  }  方法名() {    // 方法代码  }}

基本类示例:

class Animal {  constructor(name, type) {    this.name = name;    this.type = type;  }  speak() {    console.log(`${this.name} 发出声音。`);  }}const dog = new Animal('Buddy', '狗');dog.speak(); // 输出:Buddy 发出声音。

关键点:

构造函数 (constructor): 用于初始化类的实例。实例方法: 类中定义的方法,可在实例上调用。

2. JavaScript 继承

继承允许一个类继承另一个类的属性和方法,使用 extends 关键字实现。

继承语法:

class 子类 extends 父类 {  constructor() {    super(); // 调用父类构造函数    // 子类额外初始化代码  }}

继承示例:

class Animal {  constructor(name) {    this.name = name;  }  speak() {    console.log(`${this.name} 发出声音。`);  }}class Dog extends Animal {  constructor(name, breed) {    super(name); // 调用父类构造函数    this.breed = breed;  }  speak() {    console.log(`${this.name},一只${this.breed},汪汪叫。`);  }}const dog = new Dog('Buddy', '金毛寻回犬');dog.speak(); // 输出:Buddy,一只金毛寻回犬,汪汪叫。

关键点:

super(): 调用父类构造函数。方法重写: 子类可以重写父类的方法。

3. 方法重写

子类可以重写父类的方法,使用子类版本的实现。

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

方法重写示例:

class Animal {  constructor(name) {    this.name = name;  }  speak() {    console.log(`${this.name} 发出声音。`);  }}class Cat extends Animal {  speak() {    console.log(`${this.name} 喵喵叫。`);  }}const cat = new Cat('Whiskers');cat.speak(); // 输出:Whiskers 喵喵叫。

关键点:

子类方法实现会覆盖父类方法。可使用 super.方法名() 调用父类方法。

4. 多重继承(间接实现)

JavaScript 不直接支持多重继承,但可以使用 Mixin 模式来模拟。

Mixin 示例:

const FlyMixin = {  fly() {    console.log(`${this.name} 正在飞翔。`);  }};class Bird {  constructor(name) {    this.name = name;  }}Object.assign(Bird.prototype, FlyMixin);const bird = new Bird('麻雀');bird.fly(); // 输出:麻雀 正在飞翔。

关键点:

Mixin 通过将方法混合到原型链上实现功能扩展。Object.assign() 用于将 Mixin 的方法添加到类原型。

5. 静态方法和属性

静态方法和属性属于类本身,而非实例。

静态方法示例:

class MathUtil {  static add(a, b) {    return a + b;  }}console.log(MathUtil.add(5, 3)); // 输出:8

关键点:

静态方法用于无需实例上下文的操作。

6. Getter 和 Setter

Getter 和 Setter 用于控制属性的访问和修改。

Getter 和 Setter 示例:

class Person {  constructor(name) {    this._name = name;  }  get name() {    return this._name;  }  set name(newName) {    this._name = newName;  }}const person = new Person('Alice');console.log(person.name); // 输出:Aliceperson.name = 'Bob';console.log(person.name); // 输出:Bob

关键点:

Getter 用于获取属性值。Setter 用于设置属性值。

7. 总结

JavaScript 类和继承是构建复杂应用的关键。理解这些概念能编写更清晰、更易维护的代码。 类提供了一种创建对象并管理其行为的现代方法,继承则允许代码复用和扩展。 Mixin 和静态方法等特性进一步增强了 JavaScript 的面向对象编程能力。

作者:Abhay Singh Kathayat (联系方式略)

以上就是理解 JavaScript 中的类和继承的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 21:56:43
下一篇 2025年12月13日 15:18:53

相关推荐

  • 掌握 JavaScript 类:现代 OOP 完整指南

    JavaScript 类:现代面向对象编程 ES6 引入的 JavaScript 类,是基于原型继承的语法糖衣,提供了一种更清晰、结构化的方法来定义和使用对象以及继承机制,从而提升代码的可读性和组织性。 类定义 使用 class 关键字定义类: 示例: class Person { construc…

    2025年12月19日
    000
  • 了解 JavaScript 原型:继承和方法共享综合指南

    JavaScript原型机制:继承与共享的精髓 JavaScript中的原型机制,是其对象创建和继承的基础。每个对象都关联一个原型对象,用于继承属性和方法,实现代码复用和高效的继承方式。 1. 原型是什么? 每个JavaScript对象都拥有一个内部属性[[Prototype]],指向其原型对象。该…

    2025年12月19日
    000
  • JavaScript 中的原型链:理解继承和对象查找

    JavaScript 原型链详解 JavaScript 的原型链是其继承机制的核心概念,它允许对象继承其他对象的属性和方法。 原型链工作机制 创建 JavaScript 对象时,它会链接到另一个对象——其原型。每个对象都有一个隐含的内部属性 [[Prototype]],指向其原型对象。 访问对象属性…

    2025年12月19日
    000
  • 了解 JavaScript 中的原型继承和 ESlasses

    javascript 具有与大多数传统 oop 语言不同的继承机制。原型是主要焦点,而 es6 类提供了更现代的方法。让我们看看 es6 类如何提高可读性和实用性以及原型继承如何运作。 1. 原型:继承的基础 javascript 中的每个对象都有一个到另一个对象的内部链接,称为其原型。这个原型对象…

    2025年12月19日
    000
  • 深入探讨 JavaScript 的原型链和函数的基础作用

    javasc++ript 采用独特的继承方法,与 java 或 c++ 等传统的面向对象语言不同。 javascript 使用基于原型的继承模型,而不是依赖基于类的继承。该模型以语言的函数及其原型属性为基础,构成了对象如何继承行为的基础。为了理解为什么 javascript 的继承是这样设计的,以及…

    2025年12月19日
    000
  • 如何使用 JavaScript 元编程实现 Thing 类中的 can 方法动态创建新方法?

    使用 javascript 元编程实现 thing 类 问题: 实现一个 thing 类,该类的 can 方法可以动态创建新方法,如以下示例代码所示: const jane = new thing(‘jane’); jane.can.speak(phrase => `${name} says:…

    2025年12月19日
    000
  • js如何调用外设

    JavaScript 可通过 HTML5 API(如 Geolocation、MediaDevices)、外部库(如 Johnny-Five)、Node.js(通过低级库访问串口和 I2C 总线)与外围设备交互。调用外设的步骤包括:确定设备、选择交互方法、获取权限、建立连接、发送和接收数据。 JS …

    2025年12月19日
    000
  • c++中的编译期和运行期多态_c++ CRTP与虚函数对比

    运行期多态通过虚函数实现,调用时经由虚表在运行时确定具体函数,如Animal基类指针调用Dog::speak();编译期多态采用CRTP,利用模板在编译时静态分发,如Base中通过static_cast调用implementation;前者灵活但有性能与内存开销,后者高效紧凑但类型需编译前确定;选择…

    2025年12月19日
    000
  • C++中的纯虚函数是什么?C++抽象基类(ABC)的实现方法【OOP设计】

    纯虚函数是C++中用于定义接口、强制派生类实现特定行为的机制,声明为virtual返回类型函数名(参数)=0,含纯虚函数的类为抽象基类(ABC),不可实例化,仅可继承;ABC通过纯虚函数规定“必须能做什么”,需声明虚析构函数以确保多态销毁安全。 纯虚函数是 C++ 中用于定义接口、强制派生类实现特定…

    2025年12月19日
    000
  • c++中的std::is_same和std::is_base_of_c++类型萃取应用

    std::is_same 和 std::is_base_of 是用于编译期类型判断的类型特征。1. std::is_same 判断两个类型是否完全相同,对 const、引用等敏感;2. std::is_base_of 判断第一个类型是否为第二个类型的基类或相同类型,支持多级继承且不考虑访问控制;两者…

    2025年12月19日
    000
  • C++虚函数的作用是什么_C++多态实现原理与vtable深度剖析

    虚函数通过动态绑定实现多态,使基类指针在运行时调用派生类函数;C++以vtable和vptr机制支持虚函数,vtable存储虚函数地址,vptr指向该表;继承中重写函数更新对应vtable项,新增虚函数则追加地址;多重继承可能引入多个vptr;纯虚函数定义接口并形成抽象类,强制派生类实现,体现接口与…

    2025年12月19日
    000
  • c++如何避免对象切片(Object Slicing)_c++多态与指针引用的重要性

    对象切片是指派生类对象赋值给基类对象时,仅保留基类部分而丢失派生类成员的现象。1. 值传递引发切片:当Dog对象以值方式传入Animal参数时,仅复制基类部分,导致多态失效;2. 指针避免切片:通过Animal*指向Dog对象,调用speak()可正确执行派生类函数;3. 引用避免切片:使用cons…

    2025年12月19日
    000
  • C++如何实现多态_C++虚函数表与动态绑定原理图解

    多态通过虚函数表和虚函数指针实现:1. 基类指针指向派生类对象并调用虚函数时,通过vptr找到对应vtable;2. 在vtable中查找函数地址并调用,实现运行时绑定。 在C++中,多态是通过虚函数和动态绑定实现的,其核心机制依赖于虚函数表(vtable)和虚函数指针(vptr)。下面用图解方式说…

    2025年12月19日
    000
  • C++如何实现多态_C++虚函数与纯虚函数实现动态多态的方法

    多态通过虚函数和纯虚函数实现,允许基类指针调用派生类函数。1. 虚函数使用virtual关键字声明,通过指针或引用触发动态绑定;2. 编译器为含虚函数的类生成vtable,对象包含vptr指向该表;3. 纯虚函数语法为virtual func() = 0,含有纯虚函数的类为抽象类,不能实例化;4. …

    2025年12月19日
    000
  • C++ virtual虚函数详解_C++多态性与动态绑定

    虚函数通过virtual关键字实现多态,使派生类能重写函数并在运行时动态绑定。基类指针或引用调用虚函数时,根据实际对象类型确定调用版本,如Animal*指向Dog对象则执行Dog::speak()。编译器使用vtable和vptr机制,每个含虚函数的类有虚函数表存储函数地址,对象包含指向该表的指针,…

    2025年12月19日
    000
  • C++如何实现多态_C++动态绑定与静态绑定区别深度解析

    多态指同一接口在不同对象上表现不同行为,C++通过虚函数实现,需满足继承、虚函数定义及基类指针或引用调用三个条件。静态绑定在编译期确定函数调用,基于声明类型,效率高但不支持多态;动态绑定在运行时根据实际类型确定调用,依赖虚函数表(vtable)和虚指针(vptr),支持多态但性能开销略大。关键区别在…

    2025年12月19日
    000
  • c++ 虚函数的作用 c++多态性原理分析

    虚函数实现C++运行时多态,通过基类指针调用派生类函数;2. 编译器为含虚函数类生成vtable,对象通过vptr指向对应函数地址;3. 虚析构函数确保派生类析构正确执行;4. 纯虚函数定义接口,形成抽象类,强制派生类实现。 虚函数是实现C++多态性的核心机制。通过虚函数,基类指针或引用可以在运行时…

    2025年12月19日
    000
  • c++怎么避免对象切片(object slicing)_c++多态对象切割问题与解决方案

    对象切片发生在派生类对象按值传递给基类参数时,导致派生部分丢失。例如,函数void makeSound(Animal a)接收Dog对象会切割其特有成员和虚函数,输出“Animal speaks”。避免方法:1. 使用const Animal&引用传递;2. 用指针如Animal*;3. 容…

    2025年12月19日
    000
  • C++怎么理解虚函数和多态_C++面向对象核心机制与vtable剖析

    虚函数和多态通过vtable与vptr实现动态绑定,使基类指针调用派生类重写函数;每个含虚函数的类有唯一vtable,对象含指向vtable的vptr;调用时通过vptr找表,再定位函数地址执行,运行时确定具体版本,支持接口统一与灵活扩展。 虚函数和多态是C++面向对象编程的核心机制,理解它们的关键…

    2025年12月19日
    000
  • c++中什么是多态_C++运行时多态与虚函数机制

    运行时多态通过虚函数实现,允许基类指针调用派生类函数,核心机制是vtable和vptr。满足条件:基类指针指向派生类、函数声明为virtual、派生类重写函数。示例中Animal基类的speak()被Dog和Cat重写,通过Animal*调用时执行对应派生类版本。含纯虚函数(=0)的类为抽象类,不可…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信