https://blog.rharriso.com/2012/01/javascript-oop-delegates.html
JavaScript OOP - Protocols - Ross Harrison's Blog