javascript object oriented 面向对象编程初步

JavaScript 面向对象编程初步

前言

JavaScript 是一种面向对象的编程语言,面向对象编程(Object Oriented Programming)是一种编程范式,它将数据抽象为对象,对象之间相互关联,通过这种方式组织代码和数据,使得代码更加易读易懂、可维护性更高。

在 JavaScript 中,我们可以使用函数、对象和原型等方式来实现面向对象编程。

构造函数

构造函数(Constructor)是 JavaScript 中用于创建对象的函数。我们通过构造函数产生一个新的对象,这个对象被称为实例(Instance)。

例如,我们可以通过以下方式定义一个名为 Person 的构造函数:

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

在上面的代码中,我们定义了一个构造函数 Person,它有两个参数 nameage,并且在函数体中使用了 this 关键字给实例添加了两个属性。可以看出,通过构造函数我们可以轻松地创建多个对象,每个对象都拥有相同的属性和方法。

例如,我们可以使用以下方式创建两个不同的 Person 实例:

const person1 = new Person('张三', 20);
const person2 = new Person('李四', 30);

在上面的代码中,我们使用 new 关键字创建了两个 Person 实例 person1person2,它们都拥有 nameage 两个属性。

属性和方法

在 JavaScript 中,构造函数除了可以给实例添加属性之外,还可以给实例添加方法。可以通过在构造函数的原型上添加方法来实现。

例如,我们可以在 Person 构造函数的原型上添加一个方法 sayHi

Person.prototype.sayHi = function() {
  console.log(`Hi, my name is ${this.name}, I'm ${this.age} years old.`);
}

在上面的代码中,我们使用了 prototype 属性给 Person 构造函数添加了一个方法 sayHisayHi 方法用来输出当前实例的姓名和年龄。

现在我们可以通过以下方式调用 sayHi 方法:

person1.sayHi(); // Hi, my name is 张三, I'm 20 years old.
person2.sayHi(); // Hi, my name is 李四, I'm 30 years old.

上面的代码中,我们分别调用了 person1person2sayHi 方法,输出了它们的姓名和年龄。

继承

在面向对象编程中,继承(Inheritance)是一种非常重要的机制。继承允许我们通过一个已知的对象去创建一个新的对象,并将新对象的属性和方法继承自已知对象。这种方式可以节省很多代码。

在 JavaScript 中,我们可以通过使用原型(Prototype)来实现继承。

例如,我们可以定义一个名为 Student 的构造函数,它继承自 Person 构造函数:

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

在上面的代码中,我们定义了一个名为 Student 的构造函数,它有三个参数 nameagegrade。它调用了父类 Personcall 方法,将 this 关键字绑定到当前实例,并向父类 Person 传递 nameage 两个参数。接着,它给实例添加了一个名为 grade 的属性。

现在我们可以通过以下方式创建一个 Student 实例:

const student = new Student('张三', 20, '一年级');
console.log(student.name); // 张三
console.log(student.grade); // 一年级

student.sayHi(); // Hi, my name is 张三, I'm 20 years old.

在上面的代码中,我们创建了一个 Student 实例 student,它继承了 Person 的属性和方法,并且额外添加了一个 grade 属性。可以看出,student 实例不仅具有 Person 实例的属性和方法,还具有自己的属性。

示例说明

示例一

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayHi = function() {
  console.log(`Hi, I'm ${this.name}.`);
}

function Dog(name) {
  Animal.call(this, name);
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.bark = function() {
  console.log('woof woof!');
}

const dog = new Dog('小花');
dog.sayHi(); // Hi, I'm 小花.
dog.bark(); // woof woof!

在上面的代码中,我们定义了一个 Animal 构造函数和一个 Dog 构造函数。Animal 构造函数用来创建动物实例,Dog 构造函数通过继承 Animal 构造函数来创建狗实例。我们定义了一个 bark 方法用来输出狗的叫声。最后,我们创建了一个 Dog 实例 dog,并调用了它的 sayHibark 方法。

示例二

class Shape {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  sayHi() {
    console.log('Hi, I am a shape.');
  }
}

class Circle extends Shape {
  constructor(x, y, r) {
    super(x, y);
    this.r = r;
  }

  area() {
    return Math.PI * this.r * this.r;
  }
}

const circle = new Circle(0, 0, 10);
circle.sayHi(); // Hi, I am a shape.
console.log(circle.area()); // 314.1592653589793

在上面的代码中,我们定义了一个基类 Shape 和一个派生类 CircleShape 类有 xy 两个属性,还有一个 sayHi 方法,用来输出形状的类型。Circle 类继承自 Shape 类,添加了一个 r 属性和一个 area 方法,用来计算圆的面积。最后,我们创建了一个 Circle 实例 circle,并调用了它的 sayHiarea 方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript object oriented 面向对象编程初步 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js读取文件到字符串的方法

    当我们需要将文件中的数据读取到字符串中时,为了方便操作,就需要使用到Node.js提供的fs模块中的方法。以下是读取文件到字符串的方法的详细攻略: 1. 导入fs模块 在Node.js中,我们可以通过require语句来导入fs模块,实现文件的读取操作。 const fs = require(‘fs’); 2. 使用fs.readFile()方法 fs.re…

    node js 2023年6月8日
    00
  • Nodejs Post请求报socket hang up错误的解决办法

    下面我将为你详细讲解“Nodejs Post请求报socket hang up错误的解决办法”。 问题分析 当使用Nodejs发送Post请求时,可能会出现“socket hang up”错误,造成请求失败。这个错误通常发生在以下情况之一: 请求超时,服务器没有及时响应。 请求的数据量比较大,Nodejs默认的请求体大小限制被超出。 请求时发生了错误,导致请…

    node js 2023年6月8日
    00
  • 利用node实现一个批量重命名文件的函数

    实现一个批量重命名文件的函数,可以通过Node.js提供的fs核心模块完成。下面是详细的实现攻略: 1. 引入fs模块 const fs = require(‘fs’); 2. 定义重命名函数 function batchRenameFiles(dirPath, oldNameRegex, newNameString) { fs.readdir(dirPat…

    node js 2023年6月8日
    00
  • Nodejs抓取html页面内容(推荐)

    Node.js 是一个用于编写高效且可扩展的网络应用程序的跨平台 JavaScript 运行时环境。它使用事件驱动、非阻塞 I/O 模型,使其轻松处理大量并发连接。在Node.js中,抓取HTML页面内容可以使用request和Cheerio两个库来实现。 安装依赖库 在使用Node.js抓取HTML页面内容之前,需要先安装所需的依赖库,即request和C…

    node js 2023年6月8日
    00
  • node.js中的fs.rename方法使用说明

    当我们需要在Node.js中重命名或移动文件时,可以使用fs.rename()方法来实现。该方法属于文件操作相关的模块fs(File System)中的方法之一。使用fs.rename()方法可以将一个已存在的文件重命名或者移动到指定目录。 fs.rename()方法使用说明 语法: fs.rename(oldPath, newPath, callback)…

    node js 2023年6月8日
    00
  • Nodejs高扩展性的模板引擎 functmpl简介

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,是一个使用非阻塞和事件驱动 I/O模型的服务器端 JavaScript 环境。但是Node.js 自身并不具备模板引擎功能,于是出现了大量的第三方模板引擎,其中 functmpl 就是一款高扩展性的模板引擎。 什么是 functmpl functmpl 是一个轻量级的 Ja…

    node js 2023年6月8日
    00
  • js 处理数组重复元素示例代码

    下面详细讲解一下“js 处理数组重复元素示例代码”的完整攻略。 1. 需求分析 在处理数组时,有时候需要去重,即移除数组中的重复元素。这时候我们可以使用 JavaScript 中提供的一些方法和技巧来实现。 2. 方法一:使用 Set 数据结构 Set 是 ES6 中新增的一种数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。 对于一个数组,我们…

    node js 2023年6月8日
    00
  • nodejs一个简单的文件服务器的创建方法

    创建一个简单的文件服务器,可以使用Node.js内置的模块http和fs。下面是一些步骤: 首先,创建项目目录并安装Node.js,可以在命令行中输入以下命令: mkdir my-file-server cd my-file-server npm init npm install –save http 创建server.js文件并使用以下代码创建服务器: …

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部