我的JavaScript自学日记本:prototype和__proto__详解
闪闪惹人爱2333
2025年05月16日 07:55
收录于文集
共7篇

为了让初学者轻松掌握原型机制,我们用 「工厂流水线」 和 「家族继承」 的比喻,结合生活化代码示例,彻底讲透 prototype 和 __proto__ 的区别!


一、核心概念:prototype vs __proto__  

1️⃣ prototype:工厂的「模具图纸」 

• 属于谁:构造函数(如 Dog、Person)的专属属性。  

• 作用:存储所有实例共享的属性和方法(相当于工厂的模具图纸)。  

2️⃣ __proto__:产品的「说明书」 

• 属于谁:实例对象(如 dog1、dog2)的隐藏属性。  

• 作用:指向构造函数的 prototype,告诉实例去哪里找共享方法(相当于产品说明书指向模具图纸)。  

比喻:  

• 工厂:构造函数 Dog。  

• 模具图纸:Dog.prototype(存放所有狗共用的方法)。  

• 产品:dog1、dog2(每个产品都有自己的名字,但叫声方法共享)。  

• 说明书:__proto__(告诉产品如何找到共享方法)。  

二、原型链:家族族谱的「继承规则」  

1️⃣ 查找顺序:从自己到祖先 

当访问一个对象的属性或方法时,JavaScript 会按以下顺序查找:  

1. 自己身上找 → 2. 通过 __proto__ 找模具图纸 → 3. 再找图纸的图纸 → ... → 直到 Object.prototype(终点)。  

2️⃣ 代码演示:家族继承

原型链结构:  

myDog → GuideDog.prototype → Dog.prototype → Animal.prototype → Object.prototype → null

三、避坑指南:常见错误与解决方法  

1️⃣ 错误:直接修改原型链

2️⃣ 错误:忘记修复构造函数

四、实战应用:动态扩展功能  

1️⃣ 给所有数组添加求和方法

2️⃣ 实现游戏角色技能继承

五、总结:关键对比表

通过生活化比喻和分步拆解,希望你能彻底掌握原型机制!

尝试用这些知识实现「电商商品分类继承」或「用户权限管理系统」,巩固理解吧! 🚀