¿Qué es la cadena de prototipos en JavaScript?
Prototype chaining (encadenamiento de prototipos) es usado para construir nuevos tipos de objetos basados en unos existentes. Es similar a la herencia en lenguajes basados en clases.
El prototipo en la instancia de objeto está disponible a través de Object.getPrototypeOf() o la propiedad __proto__. Hay que tener en cuenta que estas dos opciones hacen referencia al mismo objeto.
function Person(name) {
this.name = name;
}
const employee = new Person('Salva');
// get prototype
Object.getPrototypeOf(employee);
person.__proto__;
Un objeto prototipo puede tener a su vez otro objeto prototipo, el cual hereda propiedades y métodos, y así sucesivamente. Esto se conoce como cadena de prototipos y esto explican por qué diferentes objetos pueden tener métodos y propiedades definidos en otros objetos.
Ahora veamos cómo recorrer la cadena.
employee.__proto__;
// {constructor: ƒ}
employee.__proto__.__proto__;
// {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
employee.__proto__.__proto__.__proto__;
// null
Aquí tenemos una imagen para complementar.
Como se puede apreciar en la imagen al final se convierte en una cadena que va pasando de prototipo a prototipo hasta llegar a null.