javascript中的prototype;javascript中的原型链

news/发布时间2024/5/14 13:10:32

文章目录

  • 深入理解JavaScript原型链
    • 1. 什么是原型链?
    • 2. 原型链的结构
    • 3. 如何访问原型链?
    • 4. 示例演示原型链
    • 5. 原型链与继承
    • 6. 实际应用场景

深入理解JavaScript原型链

1. 什么是原型链?

在JavaScript中,每个对象都有一个原型(prototype),并且原型可以有自己的原型,形成了一个链式结构,被称为原型链。这个机制是JavaScript中实现继承和对象属性查找的基础。

2. 原型链的结构

原型链是由对象之间的连接构成的。每个对象都有一个指向它原型的链接,这个链接可以追溯到顶层的对象,形成一个链条。当你尝试访问一个对象的属性时,JavaScript引擎会沿着这个链条去查找属性。

3. 如何访问原型链?

当我们访问对象的属性或方法时,JavaScript引擎会按照以下顺序查找:

在对象本身查找
如果找不到,就查找对象的原型
如果还找不到,就继续查找原型的原型,直到找到或者到达原型链的顶端

4. 示例演示原型链

让我们通过一个更详细的例子来演示原型链的工作:

function Person(name) {this.name = name;
}Person.prototype.sayHello = function() {console.log('Hello, my name is ' + this.name);
};let person = new Person('Alice');
person.sayHello(); // 输出 "Hello, my name is Alice"

在这个例子中,person对象通过原型链继承了Person构造函数的sayHello方法。

5. 原型链与继承

原型链是JavaScript中实现继承的一种方式。通过设置子类的原型为父类的实例,子类可以继承父类的属性和方法。这样的继承方式更加灵活,并且有助于代码的组织和复用。

function Student(name, grade) {Person.call(this, name);this.grade = grade;
}Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;Student.prototype.sayGrade = function() {console.log('I am in grade ' + this.grade);
};let student = new Student('Bob', 10);
student.sayHello(); // 输出 "Hello, my name is Bob"
student.sayGrade(); // 输出 "I am in grade 10"

6. 实际应用场景

原型链不仅仅用于继承,还在其他方面有实际应用。例如,原型链的特性使得我们能够动态地扩展和修改对象的行为,从而实现一些有趣的设计模式和编程技巧。

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

通俗易懂的双亲委派机制

当你超过别人一点点,别人会嫉妒你;当你超过别人一大截,别人就会羡慕你 据说给我点关注的都成了大佬,点关注的我都会私发一份好东西 ​​​​你得先知道 在介绍双亲委派机制的时候,不得不提ClassLoader(类…

数据结构第3章 串

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图1、基本概念1)主…

在VS里使用C#制作窗口应用

新建项目 创建项目的时候搜索net,选择这个。 打开应该是这样 第一个控件 选择公共控件 - PictureBox - 拖入Form 在Image处选择上传本地资源,建议上传一个小一点的图片。 修改一下尺寸。 ctrls 保存 从“属性”切换到“事件” 双击Click事件…

统计单词数(洛谷)字符串 JAVA

题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它…

1.3.mysql5.7安装包安装

安装包程序 双击安装 勾选后点击【next】 选择第二个默认安装后点击【next】 点击【Execute】 输入密码(默认密码:tuners2012),点击【next】

RapidMiner数据挖掘2 —— 初识RapidMiner

本节由一系列练习与问题组成,这些练习与问题有助于理解多个基本概念。它侧重于各种特定步骤,以进行直接的探索性数据分析。因此,其主要目标是测试一些检查初步数据特征的方法。大多数练习都是关于图表技术,通常用于数据挖掘。 为此…

开源软件:推动软件行业繁荣的力量

文章目录 📑引言开源软件的优势分析开放性与透明度低成本与灵活性创新与协作 开源软件对软件行业的影响推动技术创新和进步促进软件行业的合作与交流培养人才和提高技能促进软件行业的可持续发展 结语 📑引言 随着信息技术的飞速发展,软件已经…

B端系统从0到1:有几步,其中需求分析要做啥?

一款B系统从无到有都经历了啥,而其中的需求分析又要做什么?贝格前端工场给老铁们做一下分析,文章写作不易,如果咱们有界面设计和前端开发需求,别忘了私信我呦,开始了。 一、B端系统从0到1都有哪些要走的步骤…

Python开源项目周排行 2024年第4周

#2024年第4周2024年2月18日1Awesome-LLM一个精选的大型语言模型 (LLM) 资源列表,涵盖了以下内容: LLM 模型介绍 论文和代码 部署工具 应用场景 教程和示例 Awesome-LLM 的目标是帮助人们了解和使用 LLM 技术,并为 LLM 开发人员提供一个资源中…

【每日一题】06 排序链表

问题描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 求解 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* sortList(struct ListNode* head) {struct…

SQL29 计算用户的平均次日留存率(lead函数的用法)

代码 with t1 as(select distinct device_id,date --去重防止单日多次答题的情况from question_practice_detail ) select avg(if(datediff(date2,date1)1,1,0)) as avg_ret from (selectdistinct device_id,date as date1,lead(date) over(partition by device_id order by d…

JS文本加密方法探究

在前端开发中,有时候我们需要对敏感文本进行简单的加密,以提高安全性。本文将介绍一种基于 JavaScript 实现的文本加密方法,使用了 Base64、Unicode 和 ROT13 编码。 示例代码 function encodeText(text) {// Base64编码var base64Encoded …

QT以前好的工程再编译出现QWidget 报错 error: no member named ‘XXXX‘ in ‘ui::Widget‘

出现这种现象主要是因为我们在修改完ui界面时没有重新构建项目或者就是因为构建的项目与原项目不在同一个文件夹下面 解决办法,选择项目,讲shadow build后面的对号去掉重新构建就行了

第4讲引入JWT前后端交互

引入JWT前后端交互 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519); JWT就是一段字符串,用来进行用户身份认证的凭证,该字符串分成三段【头部、载荷、签证】 后端接口测试&…

盲盒小程序开发:创新科技与消费者心理的完美结合

随着科技的飞速发展,小程序已经深入到我们生活的方方面面。而在众多小程序中,盲盒小程序以其独特的魅力,吸引了大量消费者的关注。本文将探讨盲盒小程序的发展背景、市场需求、开发流程以及未来趋势,以期为相关行业的从业者提供一…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容: import torchx_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0] w torch.tensor([1.0]) w.requires_grad Truedef forward(x):return x*wdef loss(x,y):y_pred forward(x)return (y_pred-y)**2…

汽车控制器软件正向开发

需求常见问题: 1.系统需求没有分层,没有结构化,依赖关系不明确 2.需求中没有验证准则 3.对客户需求的追溯缺失,不完整,颗粒度不够 4.系统需求没有相应的系统架构,需求没有分解到硬件和软件 5.需求变更管控不严格,变更频繁,变更纪录描述不准确,有遗漏,客户需求多…

说一下 JVM 运行时数据区 ?

目录 一、程序计数器(Program Counter Register) 二、Java 虚拟机栈(Java Virtual Machine Stacks) 三、本地方法栈(Native Method Stack) 四、Java 堆(Java Heap) 五、方法区&…

Linux程序性能分析60秒+

Linux性能分析大师Brendan Gregg有一篇非常著名的博客,介绍在性能分析开始的60秒内,利用标准的Linux命令行工具,执行一次充分的性能检查,获得系统资源利用率和进程运行情况的整体概念,查看是否存在异常、评估饱和度。本…

⭐北邮复试刷题106. 从中序与后序遍历序列构造二叉树__递归分治 (力扣每日一题)

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7], postor…
推荐文章