You could probably use the ES5 `Function.prototype.bind()` function to avoid the "self" hack.