Herencia de prototipos de JavaScript

JavaScript es bastante único en el panorama de los lenguajes de programación populares debido a su uso de herencia de prototipos. Averigüemos que significa eso

JavaScript es bastante único en el panorama de los lenguajes de programación populares debido a su uso de herencia de prototipos.

Si bien la mayoría de los lenguajes orientados a objetos utilizan un modelo de herencia basado en clases, JavaScript se basa enmodelo de herencia prototipo.

¿Qué significa esto?

Cada objeto de JavaScript tiene una propiedad, llamadaprototype, que apunta a un objeto diferente.

Este objeto diferente es elprototipo de objeto.

Nuestro objeto usa ese prototipo de objeto para heredar propiedades y métodos.

Digamos que tiene un objeto creado usando la sintaxis literal de objeto:

const car = {}

o uno creado con elnew Objectsintaxis:

const car = new Object()

en cualquier caso, el prototipo decaresObject:

Si inicializa una matriz, que es un objeto:

const list = []
//or
const list = new Array()

el prototipo esArray.

Puede verificar esto consultando con elObject.getPrototypeOf()y elObject.prototype.isPrototypeOf()métodos:

const car = {}
const list = []

Object.getPrototypeOf(car) === Object.prototype Object.prototype.isPrototypeOf(car)

Object.getPrototypeOf(list) === Array.prototype Array.prototype.isPrototypeOf(list)

Todas las propiedades y métodos del prototipo están disponibles para el objeto que tiene ese prototipo:

Object.prototypees el prototipo base de todos los objetos:

Object.getPrototypeOf(Array.prototype) == Object.prototype

Si se pregunta cuál es el prototipo del Object.prototype, no hay prototipo: esnull. Es un copo de nieve especial ❄️.

El ejemplo anterior que vio es un ejemplo delcadena prototipoen el trabajo.

Puedo crear un objeto que amplíe Array y cualquier objeto que instancia con él, tendrá Array y Object en su cadena de prototipos y heredará propiedades y métodos de todos los antepasados.

Además de utilizar elnewoperador para crear un objeto, o usando la sintaxis de literales para objetos y matrices, puede instanciar un objeto usandoObject.create().

El primer argumento que se pasa es el objeto utilizado como prototipo:

const car = Object.create({})
const list = Object.create(Array)

Presta atención porque puedes crear una instancia de una matriz usando

const list = Object.create(Array.prototype)

y en este casoArray.isPrototypeOf(list)es falso, mientras queArray.prototype.isPrototypeOf(list)es verdad.


Más tutoriales de js: