use Function.prototype.bind if available