JavaScript to chyba najgorszy język aby to wyjaśnić na szczęście ES6 trochę pomoże. Załóżmy iż tworzymy nową klasę która dziedziczy z klasy String
class MyString extends String {
constructor(str) {
super("100"+str);
}
}
Gdy Stworzymy sobie instancje naszej klasy
const awesomeString = new MyString("34");
To możemy wykonać rzutowanie czyli mamy możliwość wykorzystywania naszej klasy jako zwykłego stringa.
parseFloat(awesomeString);// Wynik : 10034
kod wykonuje operacje rzutowania podczas weryfikowania instancji dlatego też
awesomeString instanceof MyString // daje true
awesomeString instanceof String // również daje true ponieważ JS wykonał operacje rzutowania
Jest to tylko przykład ponieważ w JS dziedziczenie działa inaczej niż w przypadku języków z silnym typowaniem.
const num = 23.4;
const intNum = parseInt(num, 10);
Można powiedzieć ze tu tez stworzyliśmy rzutowanie gdyby JS miał osobne typy dla liczb zmiennoprzecinkowych oraz całkowitych.