Skip to content

Commit

Permalink
Merge pull request #120 from alphagov/prototype.bind
Browse files Browse the repository at this point in the history
Add polyfill for Function.prototype.bind
  • Loading branch information
dsingleton committed Jul 25, 2014
2 parents e295f45 + 4a1ba83 commit 7256f77
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions javascripts/vendor/polyfills/bind.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Function.prototype.bind
//
// A polyfill for Function.prototype.bind. Which lets you bind a defined
// value to the `this` keyword in a function call.
//
// Bind is natively supported in:
// IE9+
// Chrome 7+
// Firefox 4+
// Safari 5.1.4+
// iOS 6+
// Android Browser 4+
// Chrome for Android 0.16+
//
// Originally from:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5
// internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}

var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(this instanceof fNOP && oThis
? this
: oThis,
aArgs.concat(Array.prototype.slice.call(arguments)));
};

fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();

return fBound;
};
}

0 comments on commit 7256f77

Please sign in to comment.