JavaScript 原型链继承:掌握面向对象的基础

news2024/11/25 14:49:03

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1. 原型链继承的基本原理🔗
      • 2. 原型链继承的实现🔨
      • 3. 原型链继承的优势和不足🤖
      • 4. 原型链继承的使用场景🔨
    • 总结:🎯
    • 参考资料:📚

摘要:

💡 本文将带你深入了解 JavaScript 中的原型链继承,这是一种强大的继承机制,能够帮助我们更有效地组织和复用代码。通过原型链继承,我们可以创建具有继承关系的对象,从而实现代码的复用和扩展。

引言:

🌱 大家好,我是阿珊。在 JavaScript 中,原型链继承是一种非常常见的继承机制。它基于原型对象和实例之间的关系,实现对象之间的继承。今天,我将和大家一起探讨原型链继承的原理和应用,帮助大家更好地掌握面向对象编程的基础知识。

正文:

1. 原型链继承的基本原理🔗

JavaScript 中,每个对象都有一个指向其原型对象的引用,这个原型对象也可能有自己的原型,从而形成一个链式结构

当我们访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,解释器会沿着原型链向上查找,直到找到匹配的属性或方法为止。

2. 原型链继承的实现🔨

要实现原型链继承,我们需要使用 Object.create() 方法来创建一个空对象,然后将这个空对象的原型设置为我们想要继承的构造函数的 prototype 属性。

接下来,我们可以对这个空对象进行扩展,添加自己的属性和方法。这样,我们就实现了原型链继承。

示例代码如下:

function Parent() {
  this.parentProperty = true;
}
Parent.prototype.getParentProperty = function() {
  return this.parentProperty;
};
function Child() {
  this.childProperty = false;
}
// 实现原型链继承
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
Child.prototype.getChildProperty = function() {
  return this.childProperty;
};
const child = new Child();
console.log(child.getParentProperty()); // true
console.log(child.getChildProperty()); // false

3. 原型链继承的优势和不足🤖

优势:

  • 实现简单,只需修改原型对象即可;
  • 能够实现基于原型的方法共享,提高内存利用率;
  • 易于理解和使用,符合 JavaScript 的面向对象编程风格。

不足:

  • 继承层次过多时,性能可能受到影响;
  • 原型链继承会导致对象之间的引用关系变得复杂,不利于调试。

4. 原型链继承的使用场景🔨

原型链继承是一种实现面向对象编程中继承的方式,主要通过原型对象(prototype)来实现的。

以下是一个简单的原型链继承的例子:

function Parent() {
  this.parentProperty = true;
}

Parent.prototype.getParentProperty = function() {
  return this.parentProperty;
};

function Child() {
  this.childProperty = false;
}

// 继承自 Parent
Child.prototype = new Parent();

var childInstance = new Child();
console.log(childInstance.getParentProperty()); // 输出:true

在这个例子中,Child 继承自 Parent。通过创建 Parent 的一个实例并将其赋值给 Child.prototypeChild 就继承了 Parent 的属性和方法。

这种继承方式的主要优点是代码复用性高,子类可以继承父类的属性和方法,同时子类也可以修改或扩展这些属性和方法

但是,原型链继承也存在一些缺点,例如:

  1. 原型对象会共享属性,如果多个子类实例修改了原型对象的属性,那么其他子类实例的该属性也会被修改。
  2. 创建子类实例时,不能像构造函数那样传递参数

因此,原型链继承的使用场景主要是在需要代码复用性和扩展性的情况下,例如在创建一些通用的基础类或者工具类时。

总结:🎯

本文介绍了 JavaScript 中的原型链继承,这是一种基于原型对象和实例之间关系的继承机制。通过原型链继承,我们可以实现代码的复用和扩展,提高开发效率。同时,我们还讨论了原型链继承的优势和不足,以便大家能够在实际开发中更好地运用这一知识点。

参考资料:📚

  1. JavaScript 原型链继承
  2. JavaScript 高级程序设计

感谢大家的阅读,希望这篇文章能帮助到你!💖如果你有任何问题或建议,欢迎在评论区留言哦!💬

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为HQoS配置案例

HQoS基于层次化调度,cpe上支持三级队列: level3流队列:每个用户的同类业务是一个业务流,针对每个用户不同的业务流进行队列调度,流队列一般与业务类型对应(EF、AF、BE等)。 level2用户队列&…

Golang搭建grpc环境

简介 OS : Windows 11 Golang 版本: go1.22.0 grpc : 1.2 protobuffer: 1.28代理 没有代理国内环境下载不了库七牛CDN (试过可用) go env -w GOPROXYhttps://goproxy.cn,direct阿里云代理(运行grpc时下载包出现报错 ): go env -w GOPROXYhttps://mirr…

漫步者、南卡、Cleer开放式耳机怎么样?硬核对比测评性能强者!

​在当今市场上,开放式耳机的型号层出不穷,作为一名专业的测评博主,我对这类产品有着深入的了解和丰富的经验。最近,我的粉丝们通过私信向我咨询如何选择适合自己的开放式耳机,面对众多品牌的选择,他们感到…

基于springboot的场地预约小程序的设计与实现(程序+数据库+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 目录 一、研…

OPC UA协议转换网关

在物联网和工业自动化的世界里,OPC UA(OLE for Process Control Unified Architecture)协议凭借其开放性和互操作性,正在逐渐成为不同设备和系统间通信的桥梁。然而,在实际应用中,由于各种历史和技术原因&a…

【MySQL】视图、索引

目录 视图视图的用途优点视图的缺点创建视图查看视图修改视图删除视图注意事项 索引索引的原理索引的数据结构二分查找法Hash结构Hash冲突!!! B树二叉查找树 存在问题改造二叉树——B树降低树的高度 B树特点案例继续优化的方向 改造B树——B树…

基于Java的快递管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快递区域模块2.4 快递货架模块2.5 快递档案模块 三、界面展示3.1 登录注册3.2 快递类型3.3 快递区域3.4 快递货架3.5 快递档案3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 …

万物皆可Find My,伦茨科技ST17H6x芯片赋能产品苹果Find My功能

苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、Ai…

【RK3568+RV1126】NPU算力集成

通过瑞芯微RK3568使用USB RNDIS网络与多个RV1126算力棒进行网络通信,打造多算力集群,同时进行AI运算处理,NPU算力集成不仅能增加算力,更能灵活的控制成本,具有更高的性价比,更低的功耗。 Mini-PCIe接口的RV…

华为交换机vlan实验

一、目标 实现不同vlan之间的终端通信 二、命令学习 1.创建2个vlan # 进入系统视图 sy# 创建vlan vlan 10 vlan 202.查看vlan # 2.查看vlan display vlanThe total number of vlans is : 3 ---------------------------------------------------------------------------…

Flink JobGraph构建过程

文章目录 前言JobGraph创建的过程总结 前言 在StreamGraph构建过程中分析了StreamGraph的构建过程,在StreamGraph构建完毕之后会对StreamGraph进行优化构建JobGraph,然后再提交JobGraph。优化过程中,Flink会尝试将尽可能多的StreamNode聚合在…

【Redis】redis的基本使用

📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的概述 为什么要有redis? redis是数据库,mysql也是数据库,redis做缓存的意义就是为了减轻数据库压力 数据库为什么…

【归并排序】AcWing. 505 / NOIP2013提高组《火柴排队》(c++)

【题目描述】 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: 其中 ai 表示第一列火柴中第 i 个火柴的高度&a…

OWASP Top 10 网络安全10大漏洞——A02:A02:2021-加密机制失效

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化,以及一些合并。 A02:A02:2021-加密机制失效 上升一个位置,当前top2,以前称为敏感数据泄露,是一种状况而不是根本原因。更新后的类别…

c#简易学生管理系统

https://pan.baidu.com/s/1kCPvWg8P5hvlf26nGf2vxg?pwdya45 ya45

15.Django总结

文章目录 1.Django创建项目的命令2.MVC,MVT的理解3.Django中间件的使用4.WSGI,uWSGI服务器 和 uwsgi协议5.nginx和uWISG 服务器之间如何配合工作的6.django开发中数据库做过什么优化7.Python中三大框架各自的应用场景8.django如何提升性能(高并发)9. 什么是restful api谈谈你的…

day11_SpringCloud(Nacos注册中心,LoadBalancer,OpenFeign)

文章目录 Spring Cloud Alibaba1 系统架构演进1.1 单体架构1.2 微服务架构1.3 分布式和集群 2 Spring Cloud Alibaba概述2.1 Spring Cloud简介2.2 Spring Cloud Alibaba简介 3 微服务环境准备3.1 工程结构说明3.2 父工程搭建3.3 用户微服务搭建3.3.1 基础环境搭建3.3.2 基础代码…

(文末送书)直击前沿技术:《低代码平台开发实践:基于React》

目录 前言 一、React与低代码平台的结合优势 二、基于React的低代码平台开发挑战 三、基于React的低代码平台开发实践 四、书籍推荐 《低代码平台开发实践:基于React》 1、图书介绍 2、适用人群 3、 作者简介 4、写书原由 5、解决问题 6、书…

理解CPU指令执行:从理论到实践

理解CPU指令执行:从理论到实践 在探讨现代计算机的核心——中央处理单元(CPU)的工作原理时,我们经常遇到“时钟周期”和“指令执行”这两个概念。这些概念不仅对于理解CPU的性能至关重要,而且对于揭示计算机如何处理任…

javascript中的structuredClone()克隆方法

前言: structuredClone 是 JavaScript 的方法之一,用于深拷贝一个对象。它的语法是 structuredClone(obj),其中 obj 是要拷贝的对象。structuredClone 方法将会创建一个与原始对象完全相同但是独立的副本。 案例: 当使用Web Work…