先让我们结合生活案例理解原型原型链相关概念,想象一下一个大家庭,有很多成员。
1. 原型 (Prototype) - 家族的共同特征或技能模板
- 概念对应: 家族中代代相传的共同特征、习惯、或者家族里独有的某个手艺或知识。
- 例子: 假设你们家族的成员普遍都有高个子、善于烹饪一道祖传菜肴,或者懂得某种特定的修理技巧。这些“高个子”、“祖传菜肴烹饪方法”、“修理技巧” 就像是家族的原型属性和方法。
2. 对象 (Object) - 家族中的个体
- 概念对应: 你、你的爸爸、你的爷爷、你的曾祖父等家族里的每一个具体的人。
- 例子: 你是一个具体的“人”对象,你的爸爸是另一个具体的“人”对象,等等。
3. [[Prototype]]
(内部链接) 或 __proto__
- 子女指向父母的链接
- 概念对应: 子女天然地与父母相关联。在原型中,这个链接是单向的,从子女指向父母。
- 例子: 你出生后,你自然就知道你的爸爸是谁。你有一个内部的“链接”或者“指针”,指向你的爸爸。你的爸爸也有一个链接指向他的爸爸(你的爷爷),以此类推。
4. 原型链 (Prototype Chain) - 家族的血脉/祖谱线
- 概念对应: 这个由“子女指向父母”的链接形成的链条。从你出发,沿着你指向你爸爸的链接,再沿着你爸爸指向你爷爷的链接,一直向上追溯。
- 例子: 你的原型链就是: 你 -> 你的爸爸 -> 你的爷爷 -> 你的曾祖父 -> ... 这是一个向上追溯的祖谱线。
5. 属性/方法查找 - 寻找特征或解决问题
- 概念对应: 当你需要某种技能或想知道某个特征时,你会沿着原型链去寻找。
- 过程:
- 第一步: 你首先看看自己是否具备这个特征或技能 (查找对象自身的属性)。比如,你会不会做那道祖传菜肴?如果你自己就会,太好了,查找结束,你直接使用自己的技能。
- 第二步: 如果你自己不会 (对象本身没有该属性/方法),你就会问你的爸爸 (沿着
[[Prototype]]
链接到你的原型)。“爸爸,你会做那道祖传菜肴吗?” - 第三步: 如果你爸爸会,他就会告诉你方法或者帮你做 (在原型上找到)。查找结束。
- 第四步: 如果你爸爸也不会 (你的原型上也没有),你爸爸可能会告诉你,“我爷爷(你的曾祖父,也就是你爸爸的原型)会!” (沿着原型链继续向上)。于是你去问你的爷爷。
- 第五步: 这个过程会一直持续下去,直到找到会做这道菜的人 (在原型链上找到属性/方法)。
- 如果直到最老的祖先都找不到... 那说明这道菜肴不是你们家族的技能,或者信息失传了 (到达原型链终点仍未找到)。