we have been using `bind` instead of `var self = this`