在 JavaScript 中,原型(prototype)是一个对象,它用于实现对象之间的继承和共享属性。JavaScript 是一种基于原型的编程语言,每个对象都有一个原型,而原型又可以拥有自己的原型,形成一个原型链。
让我们逐个解释这些概念:
-
对象原型:每个 JavaScript 对象(除了 null 和 undefined)都有一个
__proto__
属性,这个属性引用了对象的原型。也可以使用Object.getPrototypeOf(obj)
来获取对象的原型。对象原型指向了该对象的父级对象或者说是该对象的构造函数的原型。例如,如果有一个对象obj
,obj.__proto__
将引用obj
的原型。 -
原型继承:JavaScript 中的原型继承是通过将对象的原型指向另一个对象来实现的。当我们访问一个对象的属性时,如果对象本身没有该属性,JavaScript 将会查找该对象的原型链,直到找到具有相应属性的原型对象为止。这样就实现了从原型对象继承属性的效果。如果原型链上的所有对象都没有该属性,那么属性的值将为 undefined。通过原型继承,可以共享方法和属性,并且可以实现对象之间的层次关系。
-
原型链:原型链是由一系列对象组成的链表结构,每个对象都有一个原型,并且可以通过
__proto__
属性访问它的原型。当我们在一个对象上访问属性时,JavaScript 会首先在该对象本身查找,如果找不到,则沿着原型链向上查找,直到找到该属性或到达原型链的末尾(null),如果还没有找到则返回 undefined。这样就形成了一个由对象原型组成的链。
JavaScript 中的原型、对象原型、原型继承和原型链是实现面向对象编程的重要机制。通过原型链,可以实现对象之间的继承和共享属性,使代码更加高效和灵活。