From https://variadic.me/posts/2013-10-22-bind-call-and-apply-in-javascript.html
Bind, Call and Apply in JavaScript