”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript + 面向对象编程

JavaScript + 面向对象编程

发布于2024-11-01
浏览:509

JavaScript   OOPs

OOP(即面向对象编程)可以帮助您以更符合逻辑和更易于管理的方式组织代码,并且可以使将来更轻松地重用和扩展代码。

在 JavaScript 中,面向对象编程 (OOP) 是一种基于“对象”概念的编程范式,“对象”是协同工作以执行某些任务的数据和函数的集合。

在 OOP 中,对象是从“类”创建的,“类”是定义它们创建的对象的属性和方法的模板。

面向对象编程的优点

在 JavaScript 中使用 OOP 的主要优点之一是它允许您以更符合逻辑和更易于管理的方式组织代码。使用 OOP,您可以创建代表现实世界对象的类并定义这些对象所具有的属性和方法。这使得您的代码更容易理解和使用,尤其是当代码变得越来越复杂时。

OOP 在 JavaScript 或编程中的另一个好处是它允许代码重用和可扩展性。

一旦定义了一个类,您就可以根据需要从该类创建任意数量的对象。这可以节省您大量的时间和精力,因为您不必为每个对象一遍又一遍地编写相同的代码。

此外,您可以创建从现有类继承的新类,这允许您重用和扩展现有代码的功能。

OOP 入门
要开始使用 JavaScript 中的 OOP,您首先需要了解类的概念。在 JavaScript 中,类是一个模板,定义它所创建的对象的属性和方法。这是代表一个人的简单类的示例:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  greet() {
    console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

在此示例中,Person 类有两个属性:name 和age。它还有一种方法,greet(),它向控制台输出问候语。

要从此类创建对象,请使用 new 关键字,后跟类的名称,如下所示:

const person1 = new Person("John", 25);
const person2 = new Person("Jane", 30);

创建对象后,您可以使用点表示法访问其属性和方法,如下所示:

JavaScript 中的 OOP 继承
除了定义类和创建对象之外,JavaScript 中的 OOP 还允许继承。这意味着您可以创建继承现有类的属性和方法的新类。例如,假设您想要创建一个代表学校学生的 Student 类。 Student 类可以继承自 Person 类,如下所示:

class Student extends Person {
  constructor(name, age, school) {
    super(name, age);
    this.school = school;
  }
  info() {
    console.log(`${this.name} is ${this.age} years old and goes to ${this.school}.`);
  }
}

OOPS 的四大支柱
JavaScript 中面向对象编程 (OOP) 的四大支柱是:

封装:
封装是指将数据和功能包装在一个对象内的想法。在 OOP 中,对象是代码的基本构建块,每个对象都有自己的属性和方法。这使您能够以更易于理解和使用的方式组织代码。

例如,您可以创建一个 Person 类,该类具有诸如姓名和年龄之类的属性以及诸如greet() 和introduction() 之类的方法。

抽象:

抽象是隐藏对象实现细节并仅向用户公开必要信息的过程。在 OOP 中,您可以使用抽象来使代码更加模块化和灵活。

例如,您可以定义一个抽象类,为一组相关对象提供公共接口,而无需指定这些对象的实现方式。

遗产:
继承是创建继承现有类的属性和方法的新类的过程。这允许您重用和扩展现有代码,从而节省您的时间和精力。

例如,如果您有一个为人员定义公共属性和方法的 Person 类,则可以创建一个继承自 Person 类并添加附加功能的 Student 类。

多态性:
多态性是不同对象以不同方式响应同一方法调用的能力。在 OOP 中,多态性允许您创建共享公共接口但具有不同实现的对象。这使您的代码更加灵活,并允许您编写更易于维护和扩展的代码。

例如,您可以创建一个定义通用draw()方法的Shape类,然后为不同类型的形状(例如圆形、矩形等)创建子类,每个子类在自己的中实现draw()方法方式。

以下是如何在 JavaScript 程序中使用 OOP 的这些支柱的示例:

// Encapsulation: define a Person class with properties and methods
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  greet() {
    console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

// Inheritance: define a Student class that inherits from the Person class
class Student extends Person {
  constructor(name, age, school) {
    super(name, age);
    this.school = school;
  }
  info() {
    console.log(`${this.name} is ${this.age} years old and goes to ${this.school}.`);
  }
}

// Abstraction: define an abstract Shape class with a common draw() method
abstract class Shape {
  abstract draw(): void;
}

// Polymorphism: define subclasses of Shape that implement the draw() method in their own way
class Circle extends Shape {
  draw() {
    console.log("Drawing a circle...");
  }
}
class Rectangle extends Shape {
  draw() {
    console.log("Drawing a rectangle...");
  }
}

总结
面向对象编程是 JavaScript 中的一个基本概念,可以极大地改进代码的结构和组织。通过理解和实现封装、继承和多态性等概念,您可以创建更高效​​和可维护的程序。

无论您是初学者还是经验丰富的开发人员,花时间掌握 JavaScript 中的 OOP 从长远来看都会得到回报。感谢您的阅读,祝您编码愉快。

版本声明 本文转载于:https://dev.to/adarshgupta101/javascript-oops-2elb?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    无法连接到mySQL数据库:故障排除错误消息要调试问题,建议将以下代码添加到文件的末尾.//config/database.php并查看输出: ... ... 回声'... echo '<pre>'; print_r($db['default']); echo '</pr...
    编程 发布于2025-07-15
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-07-15
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-07-15
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-07-15
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-07-15
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-07-15
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-07-15
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-07-15
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-07-15
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-07-15
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-07-15
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-07-15
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-07-15
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-07-15
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-07-15

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3