JavaScript 原型的概念:每个构造函数都有一个原型对象,实例可以共享原型上的属性和方法。原型链则是通过构造函数和原型对象之间的关系形成的链。
原型的好处在于实现属性和方法的共享,减少代码冗余。我们可以使用prototype属性来访问原型。原型上的属性和方法可以被实例访问和使用。 当实例自身没有某个属性时,JavaScript 会沿着原型链查找。原型链也可以用来实现继承。我们还可以修改原型,包括添加、修改或删除原型上的属性和方法。需要注意的是,原型链也有其局限性,例如无法实现多重继承。
假设有一个 构造函数A ,通过A 创建一个实例,画出相关原型链
function A(name){
this.name = name;
}
const a = new A('a');
本次绘图涉及到 顶级函数对象 Object Function,同时涉及到 null

图解说明
__proto__ 指向构造函数的 prototype (同样适用于 class 类的实例)Object 的实例,普通对象的 __proto__都指向 Object 这个顶级函数对象的prototype__proto__属性,自定义函数都是 顶级Function 函数对象的实例,即普通函数的__proto__ 都指向 Function 的prototypeObject 函数对象,也是由Function 构造而来, 所以Object.__proto__ 指向 Function.prototypeFunction 不是由谁构造而来,而是浏览器的脚步引擎在启动时添加完成, 所以 Function.__proto__ 指向自己的原型即 Function.prototypeObject 的prototype的__proto__是整个原型链的顶端 为 null