JavaScript面向对象编程实战

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

​ 

​ 

✨ 前言

        面向对象编程(OOP)是JavaScript中非常重要的一个概念。掌握OOP可以帮助我们写出更加清晰、可维护的代码。本文将详细介绍JavaScript实现OOP的几种主要方式,并通过实例展示OOP在实际编程中的强大威力。

构造函数实现类

        使用构造函数可以实现类和实例的创建。构造函数约定以大写字母开头,创建实例时使用new运算符。

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

let p = new Person('Jack');

        构造函数内部使用this绑定实例属性和方法。

        构造函数是JavaScript实现面向对象编程的基础。使用构造函数可以创建对象实例,实现类和实例的关系。

构造函数有以下特点:

  • 构造函数约定以大写字母开头
  • 使用new关键字调用构造函数会生成实例对象
  • 在构造函数内部使用this来引用实例
  • 可以在构造函数内部添加实例属性和方法

例如,我们可以这样定义Person类:

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

let p1 = new Person('Jack', 18);
p1.sayHi(); // Hi, I'm Jack

在这个例子中:

  • 使用Person构造函数定义了一个类
  • 在构造函数中使用this.name和this.age添加实例属性
  • sayHi方法也使用this绑定到实例
  • 使用new Person()创建出实例对象p1
  • p1可以访问Person类中的属性和方法

构造函数不需要显示返回,默认会返回新实例对象。

原型继承        

        在JavaScript中,每个函数都会有一个prototype属性,这个属性指向函数的原型对象。我们可以通过原型对象实现继承。

        原型对象的特点是,它所包含的属性和方法可以被所有实例对象共享。原型上的修改可以立即反映到所有实例上。

原型继承的实现步骤:

  1. 定义父类构造函数
  2. 在父类原型上定义方法
  3. 定义子类构造函数
  4. 将子类原型设置为父类的一个实例对象
  5. 通过子类构造函数创建实例

例如:

// 父类
function Animal() { } 

Animal.prototype.eat = function() {
  console.log('eating...');
}

// 子类 
function Dog() { }

// 继承
Dog.prototype = new Animal(); 

let dog = new Dog();
dog.eat(); // eating...

         这实现了Dog对Animal的原型继承。

类的继承

        ES6添加了class语法,可以更方便地实现类的继承。

class Animal {
  constructor() { }

  eat() {
    console.log('eating...'); 
  }
}

class Dog extends Animal {
  constructor() {
    super();
  }
}

let dog = new Dog();
dog.eat(); // eating...

extends实现了继承,super调用父类构造函数。

封装

        封装是OOP的重要特性之一。可以使用闭包将细节隐藏起来。

function Person() {
  
  let name = 'Jack';
  
  this.getName = function() {
    return name;
  };

}

let p = new Person();
p.getName(); // 'Jack'

        这样name就被封装起来了,只能通过getName访问。

        OOP可以让我们的代码组织的更好,提高复用性和维护性。多加练习OOP,使JavaScript代码达到专业级水准!

✨ 结语

        通过本文的讲解,我们已经全面了解了JavaScript实现面向对象编程的几种主要方式,包括构造函数、原型继承、类继承等。

        面向对象编程是现代JavaScript的基石,可以帮助我们编写出更加清晰、可复用和可维护的代码。正确使用面向对象的封装、继承等特性可以使JavaScript这个弱类型语言拥有更强大的编程能力。

        学习面向对象编程也有一定难度,需要我们改变思维方式,善于从对象的角度来思考问题的解决。但回报也是巨大的。

        希望通过本文介绍,可以加深你对JavaScript面向对象编程的理解,在以后的项目中能够灵活运用对象、类、封装、继承等概念,使你的代码质量得到进一步提升。继续深入钻研面向对象编程,祝你成为JavaScript高手!

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299821.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

synchronized、volatile关键字

Java中的synchronized关键字 synchronized关键字介绍 synchronized块是Java提供的一种原子性内置锁,Java中的每个对象都可以把它当作一个同步锁来使用,这些Java内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。 线程的执行代码在进入…

LLM Agent之RAG的反思:放弃了压缩还是智能么?

已经唠了三章的RAG,是时候回头反思一下,当前的RAG是解决幻觉的终点么?我给不出直接的答案,不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良,这个思路的天花板高度有限~ 反思来源于对RAG下模型回答的直观感受&…

【软考中级-软件设计师】day3:程序设计语言基础知识

概述 练习题 程序设计语言的基本成分 练习题 编译程序基本原理 名词解释 词法分析 词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作…

Duboo-入门到学废【下篇】

目录 🥓1.dubbo-admin 🌭2.序列化 🧂3.超时 🥚4.重试 ❤️5.多版本 🧇6.负载均衡 🍟7.集群容错 1.dubbo-admin 💕💕💕 1.1dubbo-admin是什么 1.duboo-admin是一…

【大数据】Flink CDC 的概览和使用

Flink CDC 的概览和使用 1.什么是 CDC2.什么是 Flink CDC3.Flink CDC 前生今世3.1 Flink CDC 1.x3.2 Flink CDC 2.x3.3 Flink CDC 3.x 4.Flink CDC 使用5.Debezium 标准 CDC Event 格式详解 1.什么是 CDC CDC(Change Data Capture,数据变更抓取&#xf…

SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题,Redis主从之间可以做同步,为了提高主从同步时的性能,单节点Redis的内存不要设置太高,如果内存占用过多,做RDB的持久化,或者做全量同步的时候,导致大…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1)、Docker网络原理 Docker默认使用的网络模型是bridge,这里只讲bridge网络模型 1)容器之间通信原理 当安装完docker之后,docker会在宿主机上创建一个名叫docker0的网桥,默认IP是172.17.0.1…

家具电子图册制作方法

​随着互联网的普及,越来越多的人选择在线购物,家具行业也不例外。为了满足消费者对高品质家具的需求,家具电子图册应运而生。与传统纸质图册相比,家具电子图册具有更高的转化率、更低的成本和更快的更新速度。 一、与纸质版相比有…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构,称为 Filesystem Hierarchy Standard(文件系统层次结构标准),其定义了不同目录的用途和内容。 浅蓝色文字 /(根目录): /根目录是整个文件系统的起点&…

迁移学习|代码实现

还记得我们之前实现的猫狗分类器吗?在哪里,我们设计了一个网络,这个网络接受一张图片,最后输出这张图片属于猫还是狗。实现分类器的过程比较复杂,准备的数据也比较少。所以我们是否可以使用一种方法,在数据…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)添加 删除 修改 释放

在上篇文章(处理任务队列中的任务)中我们讲解了处理任务队列中的任务的具体流程,eventLoopProcessTask函数的作用: 处理队列中的任务,需要遍历链表并根据type进行对应处理,也就是处理dispatcher中的任务。 // 处理任…

Linux之Ubuntu环境Jenkins部署前端项目

今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs,需要安装相关插件 点击插件管理,输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型:如果不填 默认npm …

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目 创建第一个项目,命名为HelloWorld,点击Finish 选择Empty Ability模板,点击Next Hello World 项目已经成功创建,接来下看看效果 2.预览 Hello World 点击右侧的预…

[VUE]2-vue的基本使用

目录 vue基本使用方式 1、vue 组件 2、文本插值 3、属性绑定 4、事件绑定 5、双向绑定 6、条件渲染 7、axios 8、⭐跨域问题 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅…

RPC基础知识总结

RPC 是什么? RPC(Remote Procedure Call) 即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC ? 因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以&am…

【UML】第17篇 包图

目录 一、什么是包图 二、包图的作用: 三、应用场景: 四、绘图符号的说明: 五、语法: 六、其他要说的 一、什么是包图 包图(Package Diagram)是一种用于描述系统中包和包之间关系的UML图。包是一种将…

Thonny开发ESP32点灯

简介 ESP32是一款功能强大的低功耗微控制器,由乐鑫(Espressif)公司开发。它集成了Wi-Fi和蓝牙功能,适用于各种物联网应用。Thonny是一款基于Python的开源集成开发环境(IDE),专为MicroPython设计…

【数据分享】2024年我国主要城市地铁站点和线路数据

地铁站点与线路数据是我们经常会用到的一种基础数据。去哪里获取该数据呢? 今天我们就给大家分享一份2024年1月采集的全国有地铁城市的地铁站点与线路数据,数据格式为shp,数据坐标为wgs1984地理坐标。数据中不仅包括地铁,也包括轻…

Java Swing手搓坦克大战遇到的问题和思考

1.游戏中的坐标系颇为复杂 像素坐标系还有行列坐标,都要使用,这之间的互相转化使用也要注意 2.游戏中坦克拐弯的处理,非常重要 由于坦克中心点是要严格对齐到一条网格线,并沿着这条线前进的,如果拐弯不做处理&#…

法线变换矩阵的推导

背景 在冯氏光照模型中,其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间,我们需要将法向量转换到世界空间,然后在世界空间中让法向量和光线做运算。这里便有一个问题,如何将法线…