现代 JavaScript 教程:原型与原型链,为什么它是 JS 最难懂也最关键的概念?
现代 JavaScript 教程原型与原型链为什么它是 JS 最难懂也最关键的概念【免费下载链接】zh.javascript.info现代 JavaScript 教程The Modern JavaScript Tutorial以最新的 ECMAScript 规范为基准通过简单但足够详细的内容为你讲解从基础到高阶的 JavaScript 相关知识。项目地址: https://gitcode.com/gh_mirrors/zh/zh.javascript.info在现代 JavaScript 教程中原型Prototype与原型链是每个开发者都绕不开的核心概念。它解释了为什么一个对象能继承另一个对象的方法也是理解 class、this 绑定、继承机制的基石。本文面向初学者用最少、最直观的方式讲清楚原型是什么、原型链如何工作、以及它在真实代码中为什么关键。 为什么原型这么难懂很多初学者的困惑来自一个误解JavaScript 是基于原型的语言而不是基于类的语言。其他语言里A 继承 B意味着把 B 的代码复制给 A而在 JavaScript 中继承意味着建立一条查找路径——A 找不到某属性时会顺着路径去 B 里找。国际空间站的组装过程恰好是这个思想的绝佳类比每个舱段模块只负责自己的部分需要供电或通信时就顺着连接结构去相邻模块查找。 原型是什么一个隐藏属性 [[Prototype]]在 JavaScript 中每个对象都有一个特殊的隐藏属性[[Prototype]]规范命名它要么为null要么指向另一个对象——这个对象就叫原型。核心规则只有一条当你读取对象上不存在的属性时JavaScript 会自动去它的原型中查找。一个经典示例动物与兔子let animal { eats: true }; let rabbit { jumps: true, __proto__: animal }; alert(rabbit.eats); // true —— 来自原型 animal alert(rabbit.jumps); // true —— 兔子自己的属性rabbit.__proto__就是[[Prototype]]的历史遗留访问器现代代码更推荐Object.getPrototypeOf/Object.setPrototypeOf。⛓️ 原型链可以很长的一条查找路径原型可以层层嵌套形成原型链Prototype Chain。查找属性时引擎从对象自身开始逐级向上直到找到或触及nulllet animal { eats: true, walk() { alert(Animal walk); } }; let rabbit { jumps: true, __proto__: animal }; let longEar { earLength: 10, __proto__: rabbit }; longEar.walk(); // Animal walk来自 animal alert(longEar.jumps); // true来自 rabbit查找顺序longEar → rabbit → animal → Object.prototype → null。链有两个限制不能形成闭环赋值时若成环会抛出错误一个对象只能有一个[[Prototype]]不存在多继承。✍️ 关键陷阱写入不走原型只有读取才走这是新手最容易踩的坑读取缺失属性 → 去原型找写入/删除属性 → 永远直接作用于对象本身不会碰原型。rabbit.walk function() { alert(Bounce-bounce!); }; // 现在 rabbit 有了自己的 walk彻底遮蔽了原型上的方法还有一个高频疑问继承来的方法里this指向谁答案this永远是点号前面的对象与方法是自己定义的还是继承来的无关。方法被共享但对象状态是各自独立的——rabbit.sleep()修改的是rabbit.isSleeping原型的animal不受影响。 构造函数与 F.prototype原型的另一张面孔使用new F()创建对象时F.prototype会被用作新对象的[[Prototype]]function Rabbit(name) { this.name name; } Rabbit.prototype { eats: true }; let rabbit new Rabbit(White); alert(rabbit.eats); // true来自 Rabbit.prototype每个函数默认都有一个prototype属性且自带constructor指回函数本身// 默认Rabbit.prototype { constructor: Rabbit } alert(rabbit.constructor Rabbit); // true经由原型链继承这让你可以照着现有对象再造一个同类new rabbit.constructor(Black)。 原生对象也在用原型链Array、Date、String这些内建对象同样遵循原型继承。例如你从未写过concat但它藏在Array.prototype里所以任何数组都能调用——这就是原生原型的威力。现代 class 语法正是这套机制的糖衣class Child extends Parent底层做的依然是把子类的[[Prototype]]指向父类。️ 动手验证在浏览器控制台调试原型链理论不如实践。打开浏览器开发者工具直接在控制台验证原型链试试这几行你会对原型链所见即所得let animal { eats: true }; let rabbit { jumps: true, __proto__: animal }; Object.getPrototypeOf(rabbit) animal; // true rabbit.hasOwnProperty(jumps); // true rabbit.hasOwnProperty(eats); // false继承来的Safari 用户需要在偏好设置的高级中勾选 Show Develop menu in menu bar 才能打开控制台 延伸学习官方教程章节导航想系统吃透这块内容可以按顺序阅读本仓库的原型章节位于 1-js/08-prototypes/原型继承入门01-prototype-inheritance/article.md构造函数与 F.prototype02-function-prototype/article.md原生原型03-native-prototypes/article.md原型方法与 hasOwnProperty04-prototype-methods/article.md章节总目录index.md学完原型后建议衔接 09-classes/ 章节你会惊讶地发现 class 语法不过是原型链的优雅包装。 总结一张表记住原型与原型链要点说明什么是原型对象隐藏的[[Prototype]]指向另一个对象或null什么时候用到读取缺失属性时沿原型链向上查找写入会不会走原型不会写操作直接作用于对象本身this指向谁点号前的对象与继承无关方法共享吗方法共享状态各自独立遍历谁for..in含继承属性Object.keys只含自有属性原型与原型链是 JavaScript 最难懂却也最关键的概念之一——一旦理解查找路径这个心智模型class、this 绑定、继承甚至instanceof都会瞬间通透。【免费下载链接】zh.javascript.info现代 JavaScript 教程The Modern JavaScript Tutorial以最新的 ECMAScript 规范为基准通过简单但足够详细的内容为你讲解从基础到高阶的 JavaScript 相关知识。项目地址: https://gitcode.com/gh_mirrors/zh/zh.javascript.info创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

TensorFlow与PyTorch选型指南:从安装部署到学术工业的深度对比

TensorFlow与PyTorch选型指南:从安装部署到学术工业的深度对比

1. 框架选型这件事,别让站队思维替你做决定每次在技术群里看到有人问“TensorFlow和PyTorch到底选哪个”,底下大概率会分成两派吵起来。一派说PyTorch是学术界亲儿子,动态图写起来跟写Python一样自然;另一派说TensorFlow才是工业部…

2026/9/19 11:04:59 阅读更多 →
腾讯ima知识库搭建实战:从安装到AI问答的完整避坑指南

腾讯ima知识库搭建实战:从安装到AI问答的完整避坑指南

1. 为什么我最终把主力知识库迁到了腾讯ima先说结论:腾讯ima不是那种“装完就吃灰”的工具。我从去年开始陆续试过Obsidian、Notion、飞书文档、Dify本地知识库这几套方案,最后把日常资料沉淀的主力位置给了ima,原因很朴素——它把“收集、解…

2026/9/19 11:03:59 阅读更多 →
青龙面板定时任务实战:快手极速版脚本配置与排错指南

青龙面板定时任务实战:快手极速版脚本配置与排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 11:03:59 阅读更多 →

最新新闻

Windows复制文件提示“资源正在使用中”?从文件句柄占用到MTP的完整排查方案

Windows复制文件提示“资源正在使用中”?从文件句柄占用到MTP的完整排查方案

不知道你有没有碰上过这种憋屈事:手机连着电脑,想往硬盘里备份一批照片和视频,刚点复制,Windows 就弹一个“请求的资源正在使用中”的提示,然后整个复制任务直接中断,试了几次都是同一个结果,换…

2026/9/19 12:49:43 阅读更多 →
BrewUI:给 Homebrew 套上图形界面的包管理利器

BrewUI:给 Homebrew 套上图形界面的包管理利器

1. BrewUI 是什么,为什么值得聊1.1 从 Homebrew 的生态现状说起每个用 macOS 做开发的程序员,早晚都会认识 Homebrew。它是一个包管理器,负责帮你安装、升级、卸载各种开源软件和开发工具。Git、Node、Python、Redis、FFmpeg,几乎…

2026/9/19 12:49:43 阅读更多 →
海康威视校招在线测评全攻略:题型拆解与备考策略

海康威视校招在线测评全攻略:题型拆解与备考策略

1. 校招测评到底在考什么每年校招季,海康威视的在线测评环节都会刷掉一大批简历过关但测评没准备的人。我见过太多学弟学妹,技术面能跟面试官聊得风生水起,结果卡在测评这一关,连面试机会都没拿到。海康威视的在线测评不是走过场&…

2026/9/19 12:49:43 阅读更多 →
eNSP安装与启动失败错误代码40排查全攻略

eNSP安装与启动失败错误代码40排查全攻略

搞网络方向的朋友,不管你是准备考HCIA、HCIP,还是单纯想在自己电脑上练练路由交换配置,eNSP基本是绕不开的第一站。这些年我帮人远程看环境问题,十个里有八个是卡在“装好了但设备启动不起来”这个环节,尤其那个经典的…

2026/9/19 12:49:43 阅读更多 →
LabVIEW通过HslCommunication实现西门子S7-200 Smart通信实践

LabVIEW通过HslCommunication实现西门子S7-200 Smart通信实践

简介:面向LabVIEW与工业PLC通信开发人员,这份PDF教程聚焦如何借助HslCommunication组件实现LabVIEW与西门子Smart 200 PLC的稳定通信。内容从软件准备、组件下载与安装出发,逐步演示SiemensS7Net节点的配置与ConnectServer连接建立&#xff0…

2026/9/19 12:49:43 阅读更多 →
30 天掌握量化交易:stock 仓库从零跑通第一次回测的完整指南

30 天掌握量化交易:stock 仓库从零跑通第一次回测的完整指南

30 天掌握量化交易:stock 仓库从零跑通第一次回测的完整指南 【免费下载链接】stock 30天掌握量化交易 (持续更新) 项目地址: https://gitcode.com/GitHub_Trending/sto/stock 「我的策略到底有没有用」如果只是感觉,那它需要被验证。stock 仓库&…

2026/9/19 12:48:42 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →