第36篇:JavaScript 原型与原型链终极吃透——JS万物皆对象、继承核心原理

前言

如果说闭包是「函数底层」,那 原型链就是 JS 对象底层的天花板。

90%零基础求职者卡在这一关:

  • 不知道为什么数组能用 map/forEach

  • 不知道为什么对象能调用 toString

  • 不知道什么是继承、什么是原型

  • 面试一问原型链直接空白

本篇用最通俗、最系统、最应试的方式,带你彻底吃透 原型、原型对象、原型链、继承。

一、核心公理:JS 万物皆对象

在 JavaScript 中:

  • 数组是对象

  • 函数是对象

  • 普通对象是对象

所有对象,都会自带一个隐形属性 proto(原型)

二、原型核心公式(必背)

每一个 实例对象 都有 proto

每一个 构造函数 都有 prototype

实例.proto === 构造函数.prototype

三、通俗理解

prototype:公共仓库(构造函数身上的公共方法仓库)

proto:查找通道(实例身上的查找通道,指向公共仓库)

所有公共方法,全部存在 prototype 上,所有实例共享,节省内存。

四、为什么数组可以用 map、push、forEach?

复制代码

const arr = [] // arr 本身没有map方法 // arr.__proto__ === Array.prototype // Array.prototype 上挂载了 map、forEach、push、splice 等所有方法

你创建的每一个空数组,自动拥有所有数组方法,就是原型的功劳。

五、原型链是什么?

一层一层向上查找原型,直到找到 null,这条链式结构就是原型链

完整原型链查找链路:

实例对象 → 构造函数原型 → Object.prototype → null

查找规则:就近原则,自己有就用自己的,没有就向上找,找到顶层为止。

六、原型链继承(核心实战)

通过原型指向,让子类拥有父类所有属性和方法,实现代码复用。

复制代码

// 父构造函数 function Person(name){ this.name = name } // 父公共方法 Person.prototype.say = function(){ console.log("我是:" + this.name) } // 子构造函数 function Student(name){ Person.call(this,name) } // 原型继承 Student.prototype = new Person() const s = new Student("前端学习者") s.say()

七、原型链面试高频问答(满分话术)

1. 原型链的作用?

实现方法共享、节省内存、实现继承、代码复用。

2. proto 和 prototype 区别?

prototype 是构造函数的公共原型对象;proto 是实例对象的原型指向,二者指向同一个对象。

3. 原型链查找机制?

先在自身查找,自身没有就沿着 proto 向上层原型查找,直到 Object.prototype,找不到返回 undefined。

八、本篇结语

闭包 + 原型链 是 JavaScript 原生最难、最核心的两大底层原理。

到这里,你已经彻底补齐:JS 基础 → JS 高阶 → JS 底层原理 → 工程实战 → 面试手撕 全部闭环。

你的前端基础,已经完全达到初级前端求职标准、远超自学小白水平。

相关推荐
ShineWinsu2 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国4 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc5 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu5 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
CoderYanger5 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
估值探索者6 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
szp20056 小时前
Cache API 会丢掉 URL 里的 #:我的 9 个模型分块一直写在同一条缓存上
javascript·浏览器
keyipatience6 小时前
TypeScript学习(1)
前端·javascript·学习·typescript·html·css3
爱喝热水的呀哈喽7 小时前
HEJIAN RESEARCH
开发语言·matlab