Senior
Vysvetlite problém s dedičstvom v kóde, kde trieda rozširuje Object, a navrhnite riešenie.
sobes.tech AI
Odpoveď od AI
V JavaScripte všetky objekty predvolene dedičia od Object.prototype. Ak v kóde výslovne napíšete class MyClass extends Object, je to nadbytočné a môže to viesť k zmätku, najmä ak neskôr budete chcieť prepísať metódy základného objektu.
Problém je, že dedičstvo od Object nepridáva žiadnu funkcionalitu a môže skomplikovať reťazec prototypov, ak nechápete, že Object je koreň všetkých objektov. Niekedy to spôsobí nečakané chyby, napríklad ak sú metódy toString alebo hasOwnProperty prepísané.
Riešenie:
- Neuvádzajte výslovne
extends Object, ak na to nemáte zvláštny dôvod. - Ak chcete vytvoriť objekt bez prototypu, použite
Object.create(null). - Pre triedy dedičte od špecifickejších tried, nie priamo od
Object.
Príklad:
// Nie je potrebné výslovne písať `extends Object`
class MyClass {
constructor(name) {
this.name = name;
}
}
const obj = new MyClass('test');
console.log(obj.toString()); // funguje, pretože dedí od `Object.prototype`