javascript object oriented 面向对象编程初步

yizhihongxing

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搭建https服务器实例详解

    Node搭建HTTPS服务器实例详解 1. 生成HTTPS证书 在搭建HTTPS服务器前,需要生成HTTPS证书。可以通过OpenSSL库来生成证书。具体步骤如下: 安装OpenSSL库。可以通过以下命令在Ubuntu上安装: sudo apt-get install openssl 创建证书存储目录和证书 我们需要为HTTPS服务器生成一个完整的数字证书,…

    node js 2023年6月9日
    00
  • Cookie跨域问题解决方案代码示例

    以下是 “Cookie跨域问题解决方案代码示例”的完整攻略,希望对你有所帮助。 什么是Cookie跨域问题 在前后端分离的架构中,前端会请求后端API接口来获取数据或其他操作。如果这个API接口是来自于不同的域名,使用Cookie就会遇到跨域问题。具体来说,浏览器的同源策略会禁止不同源之间的Cookie操作,这就导致了Cookie跨域问题。 Cookie跨域…

    node js 2023年6月8日
    00
  • 高吞吐、线程安全的LRU缓存详解

    高吞吐、线程安全的LRU缓存详解 本文将对一种高吞吐、线程安全的LRU缓存的实现方法进行详细讲解。 什么是LRU缓存 LRU缓存是一种最近最少使用缓存容器,通常用于存储常用的数据,避免重复计算和读取磁盘或网络等慢速数据的操作。 LRU缓存中的元素按照被使用的最近频率排序,频率最低的元素排在队列的最前面,频率最高的元素排在队列的最后面。当缓存容量满了之后,新的…

    node js 2023年6月8日
    00
  • 详解nodejs中的异步迭代器

    详解 Node.js 中的异步迭代器 什么是异步迭代器? 在 Node.js 中,迭代器(Iterator)是一种数据结构,它会按照一定的顺序,逐个返回集合中的元素。异步迭代器(AsyncIterator)则是迭代器的异步版本,它可以接受 Promise 对象,并使用 async/await 实现异步操作。 异步迭代器是一个实现了 Symbol.asyncI…

    node js 2023年6月8日
    00
  • node.js中实现kindEditor图片上传功能的方法教程

    下面是详细的“node.js中实现kindEditor图片上传功能的方法教程”的完整攻略: 1. 准备工作 首先需要安装 kindEditor 插件,在页面中引入插件相关JS和CSS文件。 2. 后台实现图片上传功能 2.1 安装 koa-body 中间件 为了方便处理上传的图片,我们需要安装一个中间件 koa-body,该中间件用于解析 multipart…

    node js 2023年6月8日
    00
  • 详解PNPM Monorepo依赖项管理功能模拟实现

    什么是 PNPM Monorepo? PNPM Monorepo 是一个基于 PNPM 工具的多仓库(Monorepo)项目的依赖项管理工具。它可以帮助我们更好地管理项目的依赖项,保持项目的稳定运行。 PNPM Monorepo 的功能 PNPM Monorepo 的功能主要有: 更高效的依赖项安装方式,避免重复下载,减少磁盘空间占用 更快的构建和测试速度,…

    node js 2023年6月8日
    00
  • webpack的移动端适配方案小结

    webpack的移动端适配方案小结 了解了Vue/React之后,我们都知道构建工具Webpack,它能够打包、压缩和优化资源,并且通过其插件系统可以支持许多功能。其中之一就是移动端适配方案。在这篇文章中,我们将探讨如何实现Webpack的移动端适配方案。 首先,什么是移动端适配? 移动端的屏幕、设备尺寸、分辨率、浏览器版本等诸多因素会导致 Web 应用的展…

    node js 2023年6月8日
    00
  • 2014年最火的Node.JS后端框架推荐

    2014年最火的Node.JS后端框架推荐 Node.js是一个服务器端JavaScript环境,它以高效的事件驱动和非阻塞I / O模型而闻名,在现代Web应用程序开发中越来越受欢迎。但是,Node.js本身只是一个运行时环境,它需要框架来简化Web应用程序开发。在 2014年,以下是一些最流行的Node.js后端框架: 1. Express Expres…

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