In JavaScript, le variabili (e gli oggetti) possono cambiare tipo.
myVar = 'A mere string';
myVar.size = 'big'; // now it is an object with its own properties
myVar.doIt = function(){ /*whatever*/ }; //it even has methods
myVar.prototype.style = 'funky'; // and now its own distinct prototype;
myVar = 9; //nope, it is just a number after all
Questo è l'opposto del controllo di tipo statico.
Un oggetto ha molti modi di ereditare da un altro oggetto senza essere costretto ad appartenere alla stessa classe. In realtà, l'intero concetto di classe è estraneo a JavaScript.
Ciò rende la massima flessibilità. Puoi avere un migliaio di oggetti che condividono le stesse proprietà e il medesimo comportamento, e un mille-prima con un qualcosa in più, senza l'ingombrante necessità di alterare la classe superiore e di incidere sui primi mille.
Certo, a volte può essere fonte di confusione. Se, come la maggior parte di noi, vieni da uno sfondo di programmazione OO strongmente tipizzata come Java, ti troverai nella posizione di disimparare parte di ciò che conosci.
Vedi anche Object.assign () per un suggerimento di ereditarietà senza classi.
Un ultimo consiglio: JavaScript: Good Parts è un eccellente libro di un autore eccellente. È anche molto compatto, confinante o addirittura apparentemente criptico. Non aspettarti di capire tutto in una volta. È il tipo di libri che tieni a portata di mano e continui a tornare a quando la tua esperienza cresce.