https://mysteryweevil.medium.com/mastering-class-design-patterns-a-practical-guide-in-javascript-5920b336ce89