JavaScript Herencia prototípica


Ejemplo

Supongamos que tenemos un objeto plano llamado prototype :

var prototype = { foo: 'foo', bar: function () { return this.foo; } };

Ahora queremos otro objeto llamado obj que herede del prototype , que es lo mismo que decir que prototype es el prototipo de obj

var obj = Object.create(prototype);

Ahora todas las propiedades y métodos del prototype estarán disponibles para obj

console.log(obj.foo);
console.log(obj.bar());

Salida de consola

"foo"
"foo"

La herencia prototípica se realiza a través de referencias de objetos internamente y los objetos son completamente mutables. Esto significa que cualquier cambio que realice en un prototipo afectará inmediatamente a todos los demás objetos de los que el prototipo sea prototipo.

prototype.foo = "bar";
console.log(obj.foo);

Salida de consola

"bar"

Object.prototype es el prototipo de cada objeto, por lo que se recomienda encarecidamente que no te metas con él, especialmente si utilizas una biblioteca de terceros, pero podemos jugar con él un poco.

Object.prototype.breakingLibraries = 'foo';
console.log(obj.breakingLibraries);
console.log(prototype.breakingLibraries);

Salida de consola

"foo"
"foo"

Dato curioso , he usado la consola del navegador para hacer estos ejemplos y he roto esta página agregando la propiedad breakingLibraries .