https://rheab.medium.com/object-oriented-programming-part-1-every-javascript-developer-must-know-f855924c431f