https://javascripttricks.com/how-to-use-bind-call-and-apply-to-explicitly-set-the-value-of-this-4a3e4637e2ac