(JavaScript笔记摘要)一次性搞定原型和原型链

news2024/10/5 21:17:04

一、前言

学完JavaScript ES5基础语法(核心语法)后,发现根本不够用,于是选择继续精进JavaScript功底

在这里插入图片描述

学到原型和原型链时,发现有点卡壳儿,于是投入了一定精力,进行了汇总整理和吸收,最后感觉效果不错,于是整理为笔记分享一番

二、导学

在JavaScript中,实现面向对象编程主要在于实现其三个基本特性:封装、继承和多态

封装是基于闭包实现的,而继承则基于原型链实现的,至于多态则有赖于继承

要搞清楚原型链,就需要先弄清楚原型

三、原型

__proto__ 是一个非标准的 访问对象 原型的属性。它是每个对象都具有的属性,用于指向它的原型对象

[[prototype]] 是对象的内部属性(也称为隐藏属性),指向其原型对象。不能直接访问 [[prototype]]

__proto__ 和 [[prototype]]是相互关联的,通过__proto__访问或设置对象的原型,实际上就是操作 [[prototype]]属性

下面通过代码来理解这块儿的知识点

let shs = new Object({})
console.dir(shs)
console.dir(shs.__proto__)

image-20230815231106126
🔥prototype 属性只存在于函数对象上,这是一个特殊属性,称之为原型,因为其值是一个对象,也称为原型对象

实例化对象.__proto__ === 构造函数.prototype

下面通过代码来理解这块儿的知识点

let shs = new Object({})
console.dir(shs)
console.dir(Object)
let str = new String("shs")
console.log(str.__proto__ === String.prototype)
console.log(shs.__proto__ === Object.prototype)

image-20230816153711732
【图解】
请添加图片描述
由此可以看出原型的作用:存放一些属性和方法 和 在JavaScript中实现了继承

💭思考:是不是所有的对象都有原型呢?

let shs = {name: "松花鼠"}
console.log(shs)
console.log(shs.hasOwnProperty("name"))
// 创建没有原型的对象
let zj = Object.create(null, {
    name: {
        value: "真经"
    }
})
console.log(zj)

在这里插入图片描述

四、原型链

当访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着原型链向上查找,直到找到相应的属性或方法或者到达原型链的顶端为止

下面通过代码来理解原型链

let str = new String("sg")
console.dir(str)
console.dir(str.__proto__)
console.dir(String.prototype)
let obj = new Object({})
console.dir(Object.prototype)
console.dir(String.prototype.__proto__)
console.dir(String.prototype.__proto__.__proto__)

image-20230816173728134
【图解】
请添加图片描述
由此观之,原型链是通过对象之间的关联来实现的即通过__proto__属性实现的。通过这个属性指向它的原型对象,而原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层层查找形成的链式结构称为原型链

💭思考:最顶层的原型是Object原型吗?

在JavaScript中,Object原型是所有对象的最顶层原型,为对象提供了一些通用属性和方法,并通过原型链机制实现了对象之间的继承

通过代码加深理解

let str = new String("sg")
console.dir(str)
let num = new Number(666)
console.dir(num)
let obj = new Object({})
console.dir(obj)

image-20230816175738356
【图解】
请添加图片描述

五、小结

以上是自己结合视频对原型和原型链有所理解后进行的梳理与汇总,希望可以帮到你^-^

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

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

相关文章

知识体系总结(九)设计原则、设计模式、分布式、高性能、高可用

文章目录 架构设计为什么要进行技术框架的设计 六大设计原则一、单一职责原则二、开闭原则三、依赖倒置原则四、接口分离原则五、迪米特法则(又称最小知道原则)六、里氏替换原则案例诠释 常见设计模式构造型单例模式工厂模式简单工厂工厂方法 生成器模式…

【Kubernetes】Kubernetes之配置资源管理

Secret 和 ConfigMap 一、Secret1. Secret 的作用2. Secret 的类型3. Secret 使用方式及应用场景4. Secret 的实例4.1 创建 Secret4.2 使用方式将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下将 Secret 导出到环境变量中 二、 ConfigMap1. Co…

由于找不到mfc140u.dll,无法继续执行代码怎么修复?

当我在使用某个应用程序时遇到了mfc140u.dll缺失的错误提示时,我意识到这是由于该动态链接库文件丢失或损坏所引起的。mfc140u.dll是MFC的一部分,它包含了许多与用户界面、窗口管理、控件等相关的函数和类。这个文件通常用于支持使用MFC开发的应用程序的…

高效服务器DDoS防护,F5安全架构不可少

数字化转型,特别是现代化应用正面临着严峻挑战。如何确保应用的用户体验,用户现有安全架构如何适应现代化应用防护需求,以及 API 安全直接关乎现代化应用的普及和用户的体验,甚至关系到企业数字化能否转型成功。当企业网站或服务器…

HD Supply EDI 项目测试流程

在此前的文章 HD Supply EDI 项目案例中,我们已经为大家介绍了 HD Supply EDI 项目案例,了解了 HD Supply 业务测试场景,本文将为大家介绍 EDI 项目测试流程。 HD Supply EDI 项目连接测试 在HD Supply EDI 项目中,CommerceHub为…

[oneAPI] 手写数字识别-BiLSTM

[oneAPI] 手写数字识别-BiLSTM 手写数字识别参数与包加载数据模型训练过程结果 oneAPI 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToo…

[obs] 编译记录

2023.7 obs 最近编译方式经常改。本次使用的是最新的方式编译 2023/7月份版本,记录一下遇到的坑 obs 最新版默认使用 vs2022 才能编译,如果想用 vs2019 编译,改下面这个地方就好了 CMakePresets.json 文件的obs aja 编译有问题 解决方案&a…

【方法】如何给分卷压缩文件添加密码?

在压缩文件的时候,如果文件比较大,或者网盘单个文件限制了大小,很多人会选择将文件压缩成分卷文件。 如果文件还有保密需求,那如何在压缩文件时设置分卷,又同时设置密码保护呢?下面小编来举例看看如何操作…

测试平台开发:(19)自动化测试脚本工具化 2

上一篇:测试平台开发:(18)自动化测试脚本工具化_要开朗的spookypop的博客-CSDN博客 本篇先实现创建自动化脚本的功能,将selenium代码语言转化为文字语言,如下图所示: 例1:比如下面的代码,转化为语言“用谷歌浏览器打开XX页面”: service = ChromeService(executabl…

【Python】基础语法:变量类型和动态类型

文章目录 1. 常量2. 变量3. 动态类型特性 努力经营当下 直至未来明朗 1. 常量 浮点数在内存中表示使用的是IEEE754标准,这套规则下,在内存中表示该浮点数额时候可能会存在微小的误差 在进行运算的时候,最好可以将数字(字面值常…

如何理解“I/O指令是CPU系统指令的一部分”?

I/O指令作用过程(以 I/O端口独立编址方式为例): CPU识别出当前指令是I/O指令,向I/O总线发送相应控制信号和地址信息。 之前迷惑的点:默认以为I/O指令是作用于I/O接口的,进而产生疑问,I/O接口中…

期权行权和不行权的区别

对于期权小白刚入门来说,期权是一种金融衍生品,简单理解期权就是大盘指数为标的物,可以做多和做空,在期权到期日最后一天,你面临持仓合约是选择行权呢还是不行权,下文科普期权行权和不行权的区别&#xff0…

03.Spring Security 如何保护用户密码

1. 前言 上一文我们对Spring Security中的重要用户信息主体UserDetails进行了探讨。中间例子我们使用了明文密码,规则是通过对密码明文添加{noop}前缀。那么本节将对 Spring Security 中的密码编码进行一些探讨。 2. 不推荐使用md5 首先md5 不是加密算法&#xf…

前端跨域的原因以及解决方案(vue),一文让你真正理解跨域

跨域这个问题,可以说是前端的必需了解的,但是多少人是知其然不知所以然呢? 下面我们来梳理一下vue解决跨域的思路。 什么情况会跨域? ​ 跨域的本质就是浏览器基于同源策略的一种安全手段。所谓同源就是必须有以下三个相同点:协议相同、域名…

网络套接字

网络套接字 文章目录 网络套接字认识端口号初识TCP协议初识UDP协议网络字节序 socket编程接口socket创建socket文件描述符bind绑定端口号sockaddr结构体netstat -nuap:查看服务器网络信息 代码编译运行展示 实现简单UDP服务器开发 认识端口号 端口号(port)是传输层协…

Python 3 使用HBase 总结

HBase 简介和安装 请参考文章:HBase 一文读懂 Python3 HBase API HBase 前期准备 1 安装happybase库操作hbase 安装该库 pip install happybase2 确保 Hadoop 和 Zookeeper 可用并开启 确保Hadoop 正常运行 确保Zookeeper 正常运行3 开启HBase thrift服务 使用命…

谈谈召回率(R值),准确率(P值)及F值

通俗解释机器学习中的召回率、精确率、准确率,一文让你一辈子忘不掉这两个词 赶时间的同学们看这里:提升精确率是为了不错报、提升召回率是为了不漏报 先说个题外话,暴击一下乱写博客的人,网络上很多地方分不清准确率和精确率&am…

前端实战系列:【2023酷炫前端特效】HTML蜂巢特效(附完整可执行代码 + 全网唯一!超详细注释分析 (熬夜换来的...),让你看得懂,敲的出代码!

久别重逢非昨日,万语千言不忍谈。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主🏅 🏆…

【等保测评】等保初级测评师试题合集(3w字汇总)

【等保测评】信息安全等级保护初级测评师试题合集 一、法律法规单选多选判断 二、实施指南单选多选 三、定级指南四、基本要求五、测评准则六、信息安全等级测评模拟模拟试题1一、单选二、多选三、判断四、简答 模拟试题2一、单选二、多选三、判断四、简答 模拟试题3一、单选二…

MPLS基础知识

MPLS:多协议标签交换 多协议:可以基于多种不同的3层协议来生成2.5层的标签信息; 包交换—包为网络层的PDU,故包交换是基于IP地址进行数据转发;就是路由器的路由行为; 原始的包交换:数据包进入…