JavaScript Eredità prototipale


Esempio

Supponiamo di avere un oggetto semplice chiamato prototype :

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

Ora vogliamo un altro oggetto chiamato obj che erediti dal prototype , il che equivale a dire che il prototype è il prototipo di obj

var obj = Object.create(prototype);

Ora tutte le proprietà e i metodi del prototype saranno disponibili per obj

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

Uscita della console

"foo"
"foo"

L'ereditarietà del prototipo viene effettuata attraverso i riferimenti agli oggetti internamente e gli oggetti sono completamente mutabili. Ciò significa che qualsiasi modifica apportata a un prototipo inciderà immediatamente su ogni altro oggetto di cui il prototipo è prototipo.

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

Uscita della console

"bar"

Object.prototype è il prototipo di ogni oggetto, quindi è fortemente raccomandato di non rovinarlo, specialmente se usi una libreria di terze parti, ma possiamo giocarci un po '.

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

Uscita della console

"foo"
"foo"

Fatto divertente Ho usato la console del browser per creare questi esempi e ho infranto questa pagina aggiungendo la proprietà breakingLibraries .