关于原型的一些总结

news2025/1/13 15:42:14

猛然发现太久没去复习了,于是复习了一些知识,顺便冒个泡。本次主要总结的知识点关于原型,再文章后半部分有原型相关的题,感兴趣的可直接观看。

一、原型

1.什么是原型

简单理解,原型就是一个对象,通过原型对象我们可以实现属性的继承。

当我们每次打印对象的时候其实也可以发现对象的原型[[prototype]];

在js的原型对象中,还包括constructor属性,这个属性对应的未创建所有指向该原型的实例的构造函数(即constructor指向的为构造函数);

在js的每个函数中都有一个prototype属性,当函数被作用为构造函数来创建实例时,这个函数的prototype属性值会被作为原型赋值给实例化对象(即构造函数会通过prototype将属性赋值给实例化对象);

任何一个对象都有__proto__属性,是一个指针,实例化对象的__proto__属性指向的是构造函数的原型;原型的__proto__属性指向Object的原型(这里需要注意:__proto__指针是具有兼容问题的,因此可以使用Object.getPrototypeOf()来指向Object的原型)

2.构造函数、实例化对象、原型三者的关系

1).任何一个函数都有prototype属性,是一个对象,称为原型

2).构造函数也是函数,也有prototype属性

3).实例化对象可以继承构造函数原型的属性和方法(构造函数的原型对象上的属性和方法都可以被实例化对象所继承)

4).任何一个对象都有constructor属性,实例化对象的constructor属性指向构造函数

5).原型也是对象,也有constructor属性,原型的constructor属性指向构造函数

6).任何一个对象都有__proto__属性,是一个指针,实例化对象的__proto__属性指向的是构造函数的原型;原型的__proto__属性指向Object的原型

示例图:

3.原型链

既然提到了原型就不得不提一下原型链:

在js中每个对象都有__proto__属性,当外面访问一个对象的属性时,如果这个对象内部不存在这个属性,那么就会去__proto__里去找这个属性,这个__proto__又会有自己的__proto__,于是就这样一直找下去,这就是原型链的概念;

原型链最终指向null

 二、面试题

    var o = (function () {
        var obj = {
            a: 1,
            b: 2
        }
        return {
            get: function (k) {
                return obj[k]
            }
        }
    })()

    // 如何在不改变上面代码的情况下
    // 修改 obj 对象

简单理解就是修改o中的obj,并且不去修改以上的代码,大家可以先思考一下。

|

|

|

|

三、解决方法

// 通过数据劫持,当我们获取Object原型中c属性的时候触发
Object.defineProperty(Object.prototype, 'c', {
    get() {
        return this
    }
})

// 由于o中的obj并没有c属性,因此会通过原型接着寻找c属性,结果通过数据劫持会返回obj这个对象
o.get('c').a = 3

// 此时我们打印会发现打印结果是我们所修改的结果
console.log(o.get('a'))

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

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

相关文章

【MySQL性能优化】- 一文了解MVCC机制

MySQL理解MVCC 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff…

压缩json字符串

GZIPOutputStream 需要关闭,而 ByteArrayOutputStream 不需要关闭。具体原因如下: GZIPOutputStream:GZIPOutputStream是一种过滤流,它提供了将数据压缩为GZIP格式的功能。当使用此类的实例写入数据时,它会对数据进行压…

Seata:实现分布式事务的利器

Seata:实现分布式事务的利器 Seata是一种开源的分布式事务解决方案,旨在解决分布式系统中的事务一致性问题。本文将介绍Seata的概念和原理,探讨其在分布式应用程序中的应用场景,并讨论其对于构建可靠的分布式系统的重要性。 Seata…

网赚人,为什么都退圈了?

今儿的话题多少有些悲观。 因为曾经辉煌的网赚圈也开始下滑,从没想过这一天会来的如此之快。最近一直说经济下行影响实体,我想着跟咱互联网人没关系啊,他们做实体的只针对本地客户,咱互联网人针对全国客户。还怕没人了&#xff1…

让短视频博主脾气变好的5款工具!

啊啊啊啊!就想问几句!谁在职场上脾气变差了! 虽然在职场上总会有几天不想上班也是比较正常的事情, 但有的工作做着就有种摔鼠标发疯! 考虑中不少做短视频博主一直想用却不知道的工具,也是专门给大家整理…

iTOP-3588开发板快速启动手册Windows安装串口终端调试串口常见问题(一)

2.4.1 设备管理器找不到端口 问题一:win10或者win11设备管理器找不到端口,怎么办? 解决方法: 一 可能是被隐藏了 1 首先进入到“设备管理器”中,找到如下图的位置。 2 点击“查看”,并找到的“显示隐藏…

中小学生校服订购系统lw 微信小程序-python+java+node.js+php

作为一个校服订购系统,数据流量是非常大的,因而,系统的制定需要达到方便使用、实际操作灵便的规定。所以,在设计方案校服订购系统时,应完成下列总体目标: (1)页面应美观大方友善,查找应便捷方便…

Linux:设置别名命令alias

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Linux中alias命令用于为一串字符(常代表命令)设置一个别名,该别名在Bash读取并解析一行命令时会被展开。 下面是该命令的语法。 用…

征战PRO开发板XILINX VIVADO XC7A35T

征战PRO开发板经过几个月的设计准备工作,终于成功投板,来看看它是怎么一步一步变成PCB板的吧。 PCB图 CAD图 PCB裸板 裸板做出来还挺好看的。 大家可以看到我们板子上的丝印是非常丰富的,基本将管脚映射关系都在PCB板上体现出来了&…

(学习日记)2024.03.10:UCOSIII第十二节:多优先级

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

私域营销必看:构建超高回复率和超低删除率的私信交流体系

最近,收到了一位做私域运营的朋友的咨询,他困惑地问我:“为什么我每天给我的企微用户发送群发信息,但回复率却极低,而且删好友率还特别高呢?” 我回应他:“你有没有想过,问题的关键…

C/C++程序设计实验报告2 | 循环结构实验

本文整理自博主学校大一(2021级)C/C专业课的课程实验报告,适合学弟妹或C语言初学者入门C语言学习、练习。 编译器:gcc 10.3.0 ---- 注: 1.虽然课程名为C程序设计,但实际上当时校内该课的内容大部分其实都是…

idea中操作Git将本地仓库代码完整提交到Gittee中

文章目录 1.在idea中打开你的项目根目录, idea中vcs -> create Git Repository2.选中你的项目所在的目录3. git commit -m"你的备注"4. 直接强制本地仓库覆盖远程仓库的东西5.或者直接使用git 进行这个操作 1.在idea中打开你的项目根目录, …

3d场景重建图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)

神经辐射场NeRF(Neural Radiance Fields) 概念 NeRF(Neural Radiance Fields,神经辐射场)是一种用于3D场景重建和图像渲染的深度学习方法。它由Ben Mildenhall等人在2020年的论文《NeRF: Representing Scenes as Neur…

BI数据分析案例详解:零售人货场分析该怎么做?

在当今快节奏、高竞争的商业环境中,人货场分析已成为企业成功的关键因素之一。科技的进步和数据的日益丰富使得企业对人流、货物流和场地布局的深入洞察变得愈发重要。通过科学的人货场分析,企业能更好地理解顾客行为、优化供应链、提高运营效率&#xf…

wpscan专门针对wordpress的安全扫描工具

说明 WPScan是一款专门针对WordPress的漏洞扫描工具,它使用Ruby编程语言编写。WPScan能够扫描WordPress网站中的多种安全漏洞,包括WordPress本身的漏洞、插件漏洞和主题漏洞。此外,WPScan还能扫描类似robots.txt这样的敏感文件,并…

Python打印输出Linux中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明: 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表,并统计命令的执行次数。统计时,只统计命令的名称,以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

什么是token?token是用来干嘛的?

相信很多从事计算机行业的朋友都听说过token这么个东西,但是其他行业的人就很少了解到token,下面就给大家来详细介绍一下token是什么意思?token是用来干嘛的这一块的内容,希望能帮助到大家。 🏻 token是什么意思 作为…

matplotlib-散点图

日期:2024.03.14 内容:将matplotlib的常用方法做一个记录,方便后续查找。 # 引入需要使用的库 from matplotlib import pyplot as plt# 设置画布大小 plt.figure(figsize(20,8),dpi 300)# 全局设置中文字体 plt.rcParams[font.sans-serif]…

DHCP中继实验(思科)

华为设备参考:DHCP中继实验(华为) 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP…