Javascript OOP之面向对象

yizhihongxing

JavaScript OOP之面向对象

在JavaScript中,面向对象编程是一种非常强大的技术。通过面向对象编程,我们可以将代码进行高效的封装和组织,便于后期的维护和扩展。

基本概念

在面向对象编程中,有三个基本概念:类、对象和方法。

类是一种抽象的数据类型,它描述了一类对象的属性和方法。比如,一个类可以是“人”,它包含了“姓名”、“年龄”、“性别”等属性,以及“说话”、“跑步”、“吃东西”等方法。

在JavaScript中,我们可以使用构造函数来创建类。构造函数是一种特殊的函数,可以使用关键字new来实例化一个对象。下面是一个简单的类的示例:

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name);
  }
}

在这个示例中,我们定义了一个名为Person的类,它包含了三个属性:nameagegender,以及一个方法sayHellosayHello方法通过console.log来输出一条问候语。

对象

对象是类的实例化。我们可以使用new关键字来创建一个对象实例。比如,我们可以创建一个名为tomPerson对象,其中tom的姓名为Tom,年龄为18,性别为male,并调用sayHello方法:

var tom = new Person("Tom", 18, "male");
tom.sayHello(); // 输出:Hello, my name is Tom

在这个示例中,我们通过new关键字创建了一个Person类的实例tom,并传入了三个参数。然后,我们调用tomsayHello方法,输出一条问候语。

方法

方法是类中的函数,用于执行特定的任务。比如,上面的示例中的sayHello方法就是一个方法。

方法可以通过原型来实现。在JavaScript中,每个函数都有一个prototype属性,可以用来添加方法:

Person.prototype.run = function() {
  console.log("I'm running.");
}

在这个示例中,我们通过Person.prototype.run方法,给Person类添加了一个名为run的方法。这个方法通过console.log来输出一条“我在跑步”的信息。

继承

在面向对象编程中,继承是一种非常重要的概念。它可以让我们创建一个更加复杂的对象,同时重用已有的代码。

在JavaScript中,可以使用原型链来实现继承。下面是一个继承的示例:

function Student(name, age, gender, grade) {
  Person.call(this, name, age, gender);
  this.grade = grade;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.study = function() {
  console.log("I'm studying.");
}

var jim = new Student("Jim", 16, "male", 10);
jim.sayHello(); // 输出:Hello, my name is Jim
jim.run(); // 输出:I'm running.
jim.study(); // 输出:I'm studying.

在这个示例中,我们创建了一个名为Student的子类,并让它继承了Person父类。

子类的构造函数中,使用Person.call(this, name, age, gender)来继承了父类的属性。同时,使用Object.create(Person.prototype)来继承了父类的方法,并将它赋值给了子类的原型Student.prototype。最后,将子类的构造函数指向它自己:Student.prototype.constructor = Student;

然后,我们可以创建一个名为jimStudent对象,并调用其继承了的方法和自己的方法。

示例说明

下面是两个示例,用于展示类、对象和方法的基本概念和继承的实现。

示例一:人类的构造函数和方法

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;

  this.sayHello = function() {
    console.log("Hello, my name is " + this.name);
  }

  Person.prototype.run = function() {
    console.log("I'm running.");
  }
}

var tom = new Person("Tom", 18, "male");
tom.sayHello(); // 输出:Hello, my name is Tom
tom.run(); // 输出:I'm running.

在这个示例中,我们定义了一个Person类的构造函数,它包含了三个属性:nameagegender,以及一个方法sayHello和一个方法runsayHello方法输出一条问候语,run方法输出一条“我在跑步”的信息。

然后,我们实例化一个Person对象tom,并调用它的sayHellorun方法。

示例二:学生类继承人类

function Student(name, age, gender, grade) {
  Person.call(this, name, age, gender);
  this.grade = grade;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.study = function() {
  console.log("I'm studying.");
}

var jim = new Student("Jim", 16, "male", 10);
jim.sayHello(); // 输出:Hello, my name is Jim
jim.run(); // 输出:I'm running.
jim.study(); // 输出:I'm studying.

在这个示例中,我们定义了一个Student类,它继承了Person类,并添加了一个自己的属性grade和一个自己的方法study

在子类的构造函数中,通过Person.call(this, name, age, gender)来继承了父类的属性。同时,使用Object.create(Person.prototype)来继承了父类的方法,并将它赋值给了子类的原型Student.prototype。最后,将子类的构造函数指向它自己:Student.prototype.constructor = Student;

然后,我们实例化一个Student对象jim,并调用它继承了的方法和自己的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript OOP之面向对象 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • c/c++中变量的声明和定义深入解析

    c/c++中变量的声明和定义深入解析 在c/c++中,变量的声明和定义是非常重要的,因为它们决定了变量的作用域和生命周期。本文将深入讲解变量声明和定义的概念、语法和使用方法,并提供两个实例进行说明。 变量声明和定义 在c/c++中,变量的声明和定义是不同的概念,虽然在一些情况下它们可以混用。下面分别介绍两者的概念、语法和使用方法。 变量声明 变量声明是指向编…

    C 2023年5月23日
    00
  • Qt写入Json文件的方法详解(含源码+注释)

    下面我就为您详细讲解一下“Qt写入Json文件的方法详解(含源码+注释)”这篇文章。 一、前言 本文主要介绍Qt中如何使用QJsonDocument来进行Json的操作,其中包括Json文件的读取、写入及解析等操作。该文档由以下几个部分构成: Json的基础知识——介绍了Json的基础知识和理解 Qt中Json的API使用——介绍了整个Qt中Json相关AP…

    C 2023年5月23日
    00
  • 阿里面试必会的20道C++面试题与参考答案解析

    当提到C++面试题时,涉及到的题目类型与难度可能非常广泛。针对阿里面试常见的C++面试题,以下提供了20道必会的题目及相应的参考答案解析。 1. 求100以内所有奇数的和,使用while循环实现 #include <iostream> using namespace std; int main() { int sum = 0; int i = 1…

    C 2023年5月30日
    00
  • cExcel怎么仅显示数据条? excel单元格显示数据条的技巧

    首先,我们需要使用Excel的数据验证功能来实现单元格数据条的显示。 步骤 1:准备数据 首先,我们需要准备一列数据,这些数据将在单元格中显示数据条。 步骤 2:创建数据条 在Excel中,点击“数据”选项卡,然后点击“数据验证”按钮。在“设置”选项卡下,选择“整数”或者“小数”或者“时间”格式,并且在“下限”和“上限”中输入数据的取值范围。 然后,在“输入…

    C 2023年5月23日
    00
  • C语言模拟实现简单扫雷游戏

    C语言模拟实现简单扫雷游戏攻略 背景知识 扫雷游戏是一款经典的单机游戏,由微软公司开发并受全球玩家喜爱。扫雷游戏的核心玩法是在矩阵区域内,通过翻开若干个格子来避免让地雷引爆,同时探索出所有非地雷格子并标记出所有已知的地雷格子。本攻略将通过C语言模拟实现简单的扫雷游戏,以帮助初学者巩固自己的C语言编程能力。 实现步骤 设计游戏地图:将游戏区域按照网格形式划分为…

    C 2023年5月24日
    00
  • C语言实现简易版扫雷的完整过程

    C语言实现简易版扫雷完整攻略 1. 确定项目需求 在开始开发C语言的简易版扫雷游戏之前,我们需要明确游戏的需求,包括: 游戏界面布局 雷区的生成 点击格子的处理 游戏结束的判断 2. 设计游戏界面 我们可以使用命令行界面来实现扫雷游戏的显示,使用字符来表示不同的状态,包括: 未翻开的格子 已翻开的格子 标记为雷的格子 标记为问号的格子 3. 生成雷区 我们可…

    C 2023年5月23日
    00
  • C语言基础 原码、反码、补码和移码详解

    C语言基础 原码、反码、补码和移码详解 在计算机领域,数据一般使用二进制表示,而原码、反码、补码和移码就是将数据转换为二进制表示时的一些规则和方法。 什么是原码? 原码就是一个数的二进制表示,符号位为数据的最高位,0表示正数,1表示负数。例如,-5 的原码就是: 10000101 什么是反码? 反码就是将一个数的原码取反得到的二进制表示。对于正数,其反码就是…

    C 2023年5月23日
    00
  • Win10系统磁盘C:\盘空间太大如何缩小?分区工具进行Win10硬盘区分

    Win10系统磁盘C:\盘空间太大如何缩小?这是一个常见的问题,很多人都会面临这个问题。本文将介绍如何使用分区工具进行Win10硬盘区分。 准备工作 在进行分区前,我们需要准备以下工具: EaseUS Partition Master,这是一款免费的磁盘分区工具。 备份你的数据,因为对硬盘进行分区操作可能会导致数据丢失。 使用EaseUS Partition…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部