Sobes.tech
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`