tutz

¿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.

JavaScript prototype chain

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.