https://medium.com/better-programming/how-and-why-to-use-call-apply-and-bind-in-javascript-17d50d5a1eb0