https://mysteryweevil.medium.com/using-closures-in-object-oriented-javascript-best-practices-and-code-examples-1b352b03bf55