原型和原型链

323 阅读2分钟

原型

在JavaScript中,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype属性,这个属性指向函数的原型对象,并且这个属性是一个对象数据类型的值。

让我们用一张图表示构造函数和实例原型之间的关系:

原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。

原型链

在JavaScript中万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链。

举例说明:person → Person → Object ,普通人继承人类,人类继承对象类

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。如果没有则去原型的原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object原型中依然没有找到,则返回undefined。

参考:

【前端词典】继承(一) - 原型链你真的懂吗?

深度解析原型中的各个难点

用小猪佩奇说明Javascript的原型和原型链

JavaScript 原型精髓 #一篇就够系列

详解原型链中的prototype和 __proto__

原型与继承全面刨析

JS原型链与继承别再被问倒了

原型与原型链详解

吊打前端专栏 | 吊打JavaScript之从原型到原型链

2019 面试准备 - JS 原型与原型链

【进阶5-1期】重新认识构造函数、原型和原型链

JS 系列二:深入 constructor、prototype、__proto__、[[Prototype]] 及 原型链

如何优雅的理解ECMAScript中的对象

前端系统化学习【JS篇】:(十七)原型和原型链

前端原型链污染漏洞竟可以拿下服务器shell?