什么是原型链(prototype chain)?如何实现继承?

news2025/1/10 0:51:09

聚沙成塔·每天进步一点点


⭐ 专栏简介

前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个专栏中,我们将以问答形式每天更新,为大家呈现精选的前端知识点和常见问题解答。通过问答形式,我们希望能够更直接地回应读者们对于前端技术方面的疑问,并且帮助大家逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是各种常用框架和工具,我们将深入浅出地解释概念,并提供实际案例和练习来巩固所学内容。同时,我们也会分享一些实用技巧和最佳实践,帮助你更好地理解并运用前端开发中的各种技术。

在这里插入图片描述

无论你是寻找职业转型、提升技能还是满足个人兴趣,我们都将全力以赴,为你提供最优质的学习资源和支持。让我们一起探索Web开发的奇妙世界吧!加入前端入门之旅,成为一名出色的前端开发者! 让我们启航前端之旅!!!

今日份内容:什么是原型链(prototype chain)?如何实现继承?











在这里插入图片描述


⭐ 原型链(Prototype Chain)

原型链是 JavaScript 中实现继承的一种机制。它基于对象之间的原型关系。在 JavaScript 中,几乎所有的对象都有一个关联的原型对象,你可以通过这个原型对象访问其属性和方法。当试图访问一个对象的属性或方法时,JavaScript 引擎会首先查找该对象本身是否具有该属性或方法,如果没有,则会沿着原型链向上查找,直到找到对应的属性或方法或达到原型链的末端(通常是 Object.prototype)。

原型链的工作方式如下:

  1. 每个对象都有一个 __proto__ 属性,它指向该对象的原型对象(即父对象)。
  2. 当访问一个对象的属性或方法时,如果对象本身没有这个属性或方法,JavaScript 引擎会沿着 __proto__ 链向上查找。
  3. 这个过程会一直持续,直到找到匹配的属性或方法,或者到达原型链的末端。

这是原型链的一个示意图:

          Object.prototype
                 |
                 ▼
            [Object]
                 |
                 ▼
           [Animal]
                 |
                 ▼
          [Dog] --> { name: "Buddy" }

在这个示例中,Dog 对象继承自 Animal 对象,而 Animal 对象继承自 Object 对象。

⭐ 实现继承

在 JavaScript 中,你可以使用原型链来实现继承。这里有两种常见的方式:原型继承和构造函数继承。

1. 原型继承

原型继承通过让一个对象的原型指向另一个对象来实现继承。这种方式创建的子对象会继承父对象的属性和方法。

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

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

function Dog(name, breed) {
  Animal.call(this, name); // 调用父类构造函数以初始化属性
  this.breed = breed;
}

// 使用原型链继承 Animal 的方法
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog; // 修复构造函数指向

const dog = new Dog('Buddy', 'Golden Retriever');
dog.sayHello(); // 输出 "Hello, I'm Buddy"

2. 构造函数继承

构造函数继承通过在子构造函数中调用父构造函数来实现继承。这种方式让子对象拥有父对象的属性,但方法不会被共享。

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

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

function Dog(name, breed) {
  Animal.call(this, name); // 调用父构造函数以初始化属性
  this.breed = breed;
}

const dog = new Dog('Buddy', 'Golden Retriever');
dog.sayHello(); // 输出 "Hello, I'm Buddy"

这两种方式都允许你实现对象之间的继承关系,你可以选择其中一种方式,具体取决于你的需求和代码组织方式。


⭐ 写在最后

本专栏适用读者比较广泛,适用于前端初学者;或者没有学过前端对前端有兴趣的伙伴,亦或者是后端同学想在面试过程中能够更好的展示自己拓展一些前端小知识点,所以如果你具备了前端的基础跟着本专栏学习,也是可以很大程度帮助你查漏补缺,由于博主本人是自己再做内容输出,如果文中出现有瑕疵的地方各位可以通过主页的左侧联系我,我们一起进步,与此同时也推荐大家几份专栏,有兴趣的伙伴可以订阅一下:除了下方的专栏外大家也可以到我的主页能看到其他的专栏;

前端小游戏(免费)这份专栏将带你进入一个充满创意和乐趣的世界,通过利用HTML、CSS和JavaScript的基础知识,我们将一起搭建各种有趣的页面小游戏。无论你是初学者还是有一些前端开发经验,这个专栏都适合你。我们会从最基础的知识开始,循序渐进地引导你掌握构建页面游戏所需的技能。通过实际案例和练习,你将学会如何运用HTML来构建页面结构,使用CSS来美化游戏界面,并利用JavaScript为游戏添加交互和动态效果。在这个专栏中,我们将涵盖各种类型的小游戏,包括迷宫游戏、打砖块、贪吃蛇、扫雷、计算器、飞机大战、井字游戏、拼图、迷宫等等。每个项目都会以简洁明了的步骤指导你完成搭建过程,并提供详细解释和代码示例。同时,我们也会分享一些优化技巧和最佳实践,帮助你提升页面性能和用户体验。无论你是想寻找一个有趣的项目来锻炼自己的前端技能,还是对页面游戏开发感兴趣,前端小游戏专栏都会成为你的最佳选择。点击订阅前端小游戏专栏

在这里插入图片描述

Vue3通透教程【从零到一】(付费) 欢迎来到Vue3通透教程!这个专栏旨在为大家提供全面的Vue3相关技术知识。如果你有一些Vue2经验,这个专栏都能帮助你掌握Vue3的核心概念和使用方法。我们将从零开始,循序渐进地引导你构建一个完整的Vue应用程序。通过实际案例和练习,你将学会如何使用Vue3的模板语法、组件化开发、状态管理、路由等功能。我们还会介绍一些高级特性,如Composition API和Teleport等,帮助你更好地理解和应用Vue3的新特性。在这个专栏中,我们将以简洁明了的步骤指导你完成每个项目,并提供详细解释和示例代码。同时,我们也会分享一些Vue3开发中常见的问题和解决方案,帮助你克服困难并提升开发效率。无论你是想深入学习Vue3或者需要一个全面的指南来构建前端项目,Vue3通透教程专栏都会成为你不可或缺的资源。点击订阅Vue3通透教程【从零到一】专栏

在这里插入图片描述

TypeScript入门指南(免费) 是一个旨在帮助大家快速入门并掌握TypeScript相关技术的专栏。通过简洁明了的语言和丰富的示例代码,我们将深入讲解TypeScript的基本概念、语法和特性。无论您是初学者还是有一定经验的开发者,都能在这里找到适合自己的学习路径。从类型注解、接口、类等核心特性到模块化开发、工具配置以及与常见前端框架的集成,我们将全面覆盖各个方面。通过阅读本专栏,您将能够提升JavaScript代码的可靠性和可维护性,并为自己的项目提供更好的代码质量和开发效率。让我们一起踏上这个精彩而富有挑战性的TypeScript之旅吧!点击订阅TypeScript入门指南专栏

在这里插入图片描述

本文回顾

  • ⭐ 专栏简介
  • ⭐ 原型链(Prototype Chain)
  • ⭐ 实现继承
      • 1. 原型继承
      • 2. 构造函数继承
  • ⭐ 写在最后

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

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

相关文章

Windows 10 也能安装Kafka?这篇教程让你轻松掌握!

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…

英特尔® NUC迷你电脑设置带电自启

连接电源后英特尔 NUC迷你电脑可以自动启动吗? (intel.cn) 想死的风还是吹到了公司 | 👨‍✈️喂,劳动仲裁吗?这里有人强迫猫咪打工!😿

苹果ios系统几种开发者账号区别是什么?注册条件和作用以及内部测试人数哪里不一样?怎么选择开发者账号?

苹果ios系统几种开发者账号区别是什么?注册条件和作用以及内部测试人数哪里不一样?怎么选择开发者账号? 苹果有几种开发者账号区别是什么??注册条件和作用以及内部测试人数哪里不一样?作为开发者我要怎么选…

美元加息已濒精神错乱

「你可以一时欺骗所有人,也可以永远欺骗某些人,但不可能永远欺骗所有人。」—— 亚伯拉罕林肯,美国第16任总统 隔夜美元资本市场上演了极为滑稽的一幕。 UTC时间12:30(北京时间晚8点半),美劳工统计局&#…

信号量机制之整型信号量,记录型信号量

1.信号量机制 用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。 1.信号量 信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示…

游戏设计模式专栏(六):在Cocos游戏开发中运用适配器模式

点击上方亿元程序员关注和★星标 引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 适配器模式是一种常见的…

王道考研计算机组成原理——计算机硬件的基础知识

计算机组成原理的基本概念 计算机硬件的针脚都是用来传递信息,传递数据用的: 服务程序包含一些调试程序: 计算机硬件的基本组成 控制器通过电信号来协调其他部件的工作,同时负责解析存储器里存放的程序指令,然后指挥…

渗透测试--Struts2框架

前言 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站。在我国strust2被广泛使用与各种战略性资产,Struts 2是Struts的下一代产品,但和一代相比架构有很大的区别,近年也是爆出了很多…

10-Node.js模块化

01.模块化简介 目标 了解模块化概念和好处,以及 CommonJS 标准语法导出和导入 讲解 在 Node.js 中每个文件都被当做是一个独立的模块,模块内定义的变量和函数都是独立作用域的,因为 Node.js 在执行模块代码时,将使用如下所示的…

Android---深入理解ClassLoader的加载机制

目录 Java 中的 ClassLoader 1. APPClassLoader 系统类加载器 2. ExtClassLoader 扩展类加载器 3. BootstrapClassLoader 启动类加载器 双亲委派模式(Parents Delegation Model) Android 中的 ClassLoader 1. PathClassLoader 2. DexClassLoader 总结 一个完整的 Java…

好物周刊#11:远程桌面软件

https://cunyu1943.github.io https://yuque.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. live 一个国内可直连的直播源分享项目,具有以下特点: 永…

IDEA 生成 javadoc

IDEA 生成 javadoc 在IDEA工具栏tools中,打开选项Generate JavaDoc(生成javaDoc 文件) 配置参数

【python海洋专题十三】读取多个nc文件画温度季节变化图

【python海洋专题十三】读取多个nc文件画温度季节变化图 上期内容 年平均的温度分布 本期内容 读取多个文件;拼接数据在画温度的季节分布图Part01. 使用数据 IAP 网格温度数据集 Part02. 读取nc的函数包对比 from netCDF4 import Dataset a Dataset(fileli…

华为OD机试 - 最远足迹(2022Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 刷的越多&…

设计模式14、命令模式 Command

解释说明:命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传递给调用对象。调用对象寻找可以处理该命令的合适对象,并把该命令传给相应的对象&…

Datagrip:高效数据库管理和开发

文章目录 摘要引言Datagrip的特点与优势多数据库支持强大的查询和编辑功能数据库导航和管理版本控制集成数据库安全性 Datagrip的使用方法安装和配置Datagrip查询和编辑数据数据库导航和管理版本控制和团队协作 总结参考文献 摘要 本文介绍了Datagrip作为一款强大的数据库管理…

什么是跨域资源共享(CORS)?如何在前端中处理CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

2000至2022年中国月度植被覆盖度产品

简介: 中国区域2000至2022年月度植被覆盖度产品的空间分辨率250米,合成方式采用月最大值合成。本产品采用基于归一化植被指数(NDVI)像元二分模型,根据土地利用类型确定纯植被像元值和纯裸土像元值,计算中去…

cvpr24写作模板pdfLaTex编译器注意点小结

文章目录 1 更改作者显示 Anonymous CVPR submission2 \label标签的作用3 换行符// 与换列符&4 \medskip5 首行缩进6 插入图片6.1 单幅图片6.2 并排显示 Reference https://cvpr.thecvf.com/Conferences/2024 1 更改作者显示 Anonymous CVPR submission 这一行开头加上% …

代码检查过程中为什么需要涉及到编译呢?

作者: gentle_zhou 原文链接:代码检查过程中为什么需要涉及到编译呢?-云社区-华为云 随着大家对软件安全越来越重视,在编码阶段针对源码安全的保障也被各行各业企业研发测试运维团队与个人开发者越来越频繁的被提及,其…