https://medium.com/@Marioskif/javascript-daily-tips-59-how-to-implement-javascripts-singleton-pattern-2391a30adacb