发布时间:2026/6/17 22:17:28
JavaScript高级②|原型与原型链,一张图彻底搞懂
author: 专注前端开发分享JavaScript干货title: JavaScript高级②原型与原型链一张图彻底搞懂update: 2026-04-28tags: JavaScript,原型,原型链,proto,prototype,继承,前端进阶作者专注前端开发分享JavaScript干货更新时间2026年4月适合人群有JS基础想理解对象模型和继承的开发者前言为什么需要原型JavaScript 没有传统类的概念而是通过**原型prototype**实现对象之间的共享和继承。不懂原型JS的对象系统就是黑盒。一、原型的两个核心规则1.1 prototype 与proto// 规则1函数有 prototype 属性functionPerson(name){this.namename;}console.log(Person.prototype);// { constructor: Person, ... }// 规则2对象有 __proto__ 属性指向它的原型constpnewPerson(张三);console.log(p.__proto__Person.prototype);// true ✅// 规则3原型对象也有 __proto__最终指向 nullconsole.log(Person.prototype.__proto__Object.prototype);// trueconsole.log(Object.prototype.__proto__);// null 原型链终点1.2 一张图看懂原型链实例对象 p ↓ __proto__ Person.prototype ↓ __proto__ Object.prototype ↓ __proto__ null 终点二、属性查找机制访问对象属性时JS会沿着原型链向上查找直到 null。functionPerson(name){this.namename;}// 在原型上添加方法所有实例共享Person.prototype.sayHifunction(){console.log(你好我是${this.name});};constp1newPerson(张三);constp2newPerson(李四);p1.sayHi();// 你好我是张三 从 p1.__proto__ 找到p2.sayHi();// 你好我是李四// 查找顺序演示constobj{};console.log(obj.toString());// 来自 Object.prototype// obj 自身没有 toString// → obj.__proto__ (Object.prototype) 找到了三、constructor 属性functionPerson(){}constpnewPerson();console.log(Person.prototype.constructorPerson);// trueconsole.log(p.constructorPerson);// true// p自身没有constructor从 p.__proto__ (Person.prototype) 找到// 重写 prototype 时要修正 constructorPerson.prototype{// constructor: Person, // ❌ 忘记写这个sayHi(){console.log(hi);}};constp2newPerson();console.log(p2.constructorPerson);// false ❌指向了Objectconsole.log(p2.constructorObject);// true// ✅ 正确做法Person.prototype{constructor:Person,// 手动修正sayHi(){console.log(hi);}};四、原型链继承4.1 传统继承方式// 父类functionAnimal(name){this.namename;}Animal.prototype.eatfunction(){console.log(${this.name}在吃东西);};// 子类functionDog(name,breed){Animal.call(this,name);// 调用父类构造函数this.breedbreed;}// 设置原型链Dog.prototypeObject.create(Animal.prototype);Dog.prototype.constructorDog;// 修正constructor// 子类方法Dog.prototype.barkfunction(){console.log(${this.name}在汪汪叫);};constdognewDog(旺财,金毛);dog.eat();// 旺财在吃东西 来自Animal.prototypedog.bark();// 旺财在汪汪叫 来自Dog.prototype4.2 ES6 class 语法语法糖classAnimal{constructor(name){this.namename;}eat(){console.log(${this.name}在吃东西);}}classDogextendsAnimal{constructor(name,breed){super(name);// 调用父类构造函数this.breedbreed;}bark(){console.log(${this.name}在汪汪叫);}}constdognewDog(旺财,金毛);dog.eat();// 旺财在吃东西dog.bark();// 旺财在汪汪叫console.log(doginstanceofDog);// trueconsole.log(doginstanceofAnimal);// true五、instanceof 原理// instanceof 检查原型链functionPerson(){}constpnewPerson();console.log(pinstanceofPerson);// true// 检查p.__proto__ Person.prototype → trueconsole.log(pinstanceofObject);// true// 检查p.__proto__.__proto__ Object.prototype → true// 手写 instanceoffunctionmyInstanceof(obj,Constructor){letprotoobj.__proto__;while(proto){if(protoConstructor.prototype){returntrue;}protoproto.__proto__;}returnfalse;}六、原型污染与安全问题// 原型污染修改 Object.prototype 会影响所有对象Object.prototype.isAdmintrue;constobj{};console.log(obj.isAdmin);// true ❌ 所有对象都有了// 安全做法用 Object.create(null) 创建无原型对象constsafeObjObject.create(null);safeObj.name张三;console.log(safeObj.toString);// undefined 没有原型链七、知识卡概念说明prototype函数的属性用来共享方法__proto__对象的属性指向原型原型链对象查找属性的路径constructor指向构造函数instanceof检查是否在原型链上Object.create()创建指定原型的对象classES6 继承语法糖八、课后作业画出const arr []的原型链图实现一个new的模拟函数myNew(Constructor, ...args)用原型链方式实现父类Vehicle子类Car继承并添加drive方法有问题欢迎评论区留言大家一起讨论标签JavaScript | 原型 | 原型链 |proto| prototype | 继承 | 前端进阶

相关新闻

为你的OpenMV项目“开挂”:利用OpenCV模型库快速实现物体识别(附口罩检测完整代码)
2026/6/17 22:03:09

为你的OpenMV项目“开挂”:利用OpenCV模型库快速实现物体识别(附口罩检测完整代码)

OpenMV与OpenCV模型融合实战:5步打造高精度物体识别系统在嵌入式视觉领域,OpenMV因其易用性和性价比成为创客和学生的首选。但当项目需要识别非标准物体时,许多开发者会陷入模型训练的困境。本文将揭示一个行业内的实用技巧:如何将…

阅读更多
从Apache Kylin到ThinkAdmin:手把手教你用Xcheck复现和挖掘开源项目中的CVE与0day
2026/6/5 19:56:39

从Apache Kylin到ThinkAdmin:手把手教你用Xcheck复现和挖掘开源项目中的CVE与0day

从Apache Kylin到ThinkAdmin:手把手教你用Xcheck复现和挖掘开源项目中的CVE与0day在开源组件主导企业技术栈的今天,一个未被发现的RCE漏洞可能成为压垮业务的最后一根稻草。去年某电商平台因依赖的日志组件存在未修复漏洞,导致攻击者通过恶意…

阅读更多
免费Windows虚拟磁盘终极方案:ImDisk虚拟磁盘驱动完全指南
2026/6/16 15:59:07

免费Windows虚拟磁盘终极方案:ImDisk虚拟磁盘驱动完全指南

免费Windows虚拟磁盘终极方案:ImDisk虚拟磁盘驱动完全指南 【免费下载链接】ImDisk ImDisk Virtual Disk Driver 项目地址: https://gitcode.com/gh_mirrors/im/ImDisk ImDisk Virtual Disk Driver是一款专为Windows系统设计的强大虚拟磁盘驱动工具&#xff…

阅读更多
企业AI工作流应用解析
2026/6/17 21:58:43

企业AI工作流应用解析

一、企业AI工作流行业核心认知近两年国内企业智能化转型逻辑已经发生明显变化,早些年大部分企业接触AI,大多只是用来简单生成文案、智能问答、处理基础话术,属于单点辅助类工具。但这类浅层AI功能,只能解决碎片化问题,…

阅读更多
2026年6月商城小程序TOP5对比分析及选型指南
2026/6/17 21:58:43

2026年6月商城小程序TOP5对比分析及选型指南

一、汇总表工具更适合谁价格开发方式核心特点餐宝盈门店经营型商家99元/年模板SAAS低成本、快上线BBWEYY企业展示与获客团队698-14998元/年AISAAS企业场景清晰、易落地比文云品牌项目、重设计项目7000-30000元起定制小程序视觉和内容表达更强Cursor有前后端团队的公司免费&…

阅读更多
技术深度解析:HMCL内存优化机制与低配置环境性能调优实践
2026/6/17 21:58:43

技术深度解析:HMCL内存优化机制与低配置环境性能调优实践

技术深度解析:HMCL内存优化机制与低配置环境性能调优实践 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL 当您的低配置电脑在运行高版本Minecraft时…

阅读更多
电磁干扰导致通讯丢包频繁,工业以太网模块宽温宽压设计配合状态指示灯快速定位老旧PLC故障点
2026/6/17 21:58:43

电磁干扰导致通讯丢包频繁,工业以太网模块宽温宽压设计配合状态指示灯快速定位老旧PLC故障点

一、项目背景在制造业数字化转型推进过程中,大量车间仍在使用松下FP-X、FP-X0等传统串口型PLC,这类设备无原生以太网接口,仅支持串口编程与本地触摸屏通讯,难以适配生产数据采集、远程监控、多设备联网的数字化需求。多数工厂面临…

阅读更多
2026程序员生存指南:AI时代,是淘汰还是进化?高薪岗位与突围路径全解析!
2026/6/17 21:58:43

2026程序员生存指南:AI时代,是淘汰还是进化?高薪岗位与突围路径全解析!

AI 不是淘汰程序员,而是重新定义程序员。2026 年技术就业市场呈现K 型分化:基础编码岗收缩,AI 复合型、架构型人才爆发。本文用最新数据与行业趋势,帮你看清前景、选对方向、稳住饭碗。 一、行业大势:冰火两重天&#…

阅读更多
苏超赛事网站安全防护:WAF、DDoS与仿冒页面如何联动治理
2026/6/17 20:58:43

苏超赛事网站安全防护:WAF、DDoS与仿冒页面如何联动治理

摘要 苏超的传播热度来自城市情绪、球迷互动和赛事消费,也会让官网、票务页、直播页、周边商城成为高并发访问入口。本文围绕IP欺诈风险查询,拆解苏超赛事网站如何在WAF、DDoS流量事件和仿冒页面治理中使用IP画像,提升企业安全防护能力。 一…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/16 18:17:55

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/16 20:00:23

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/17 10:35:40

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
Alice-Tools:解密AliceSoft游戏文件的终极工具集
2026/6/17 0:58:23

Alice-Tools:解密AliceSoft游戏文件的终极工具集

Alice-Tools:解密AliceSoft游戏文件的终极工具集 【免费下载链接】alice-tools Tools for extracting/editing files from AliceSoft games. 项目地址: https://gitcode.com/gh_mirrors/al/alice-tools 对于AliceSoft游戏爱好者和开发者来说,处理…

阅读更多
基于Python的酒店预订管理系统设计与实现
2026/6/17 0:58:23

基于Python的酒店预订管理系统设计与实现

第1章 绪论1.1 课题背景由于旅游业的发展和互联网技术的不断进步,酒店预订系统已经成为现代旅游业不可或缺的部分,传统的酒店预定方式存在着流程繁琐、效率低等问题,不能满足现代消费者对个性化、便捷化越来越高的需求,因此开发…

阅读更多
生成式引擎优化GEO,原来选对服务商这么重要?
2026/6/17 0:58:23

生成式引擎优化GEO,原来选对服务商这么重要?

引言在当今数字化时代,生成式引擎优化(GEO)已经成为企业提升效率、降低成本的关键技术之一。然而,选择合适的GEO源头服务商却是一个复杂且重要的决策。本文将深入探讨为什么选对GEO服务商如此重要,并提供一些实用的选型…

阅读更多
GIT修改用户名
2026/6/17 19:45:33

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/16 16:55:24

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/17 4:21:30

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多