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
的prototype
Object
函数对象,也是由Function
构造而来, 所以Object.__proto__
指向 Function.prototype
Function
不是由谁构造而来,而是浏览器的脚步引擎在启动时添加完成, 所以 Function.__proto__
指向自己的原型即 Function.prototype
Object
的prototype
的__proto__
是整个原型链的顶端 为 null