Created
November 26, 2014 04:31
-
-
Save craftzdog/56345a10b396cefa4dfd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
var Ap = Array.prototype; | |
var slice = Ap.slice; | |
var Fp = Function.prototype; | |
if (!Fp.bind) { | |
// PhantomJS doesn't support Function.prototype.bind natively, so | |
// polyfill it whenever this module is required. | |
Fp.bind = function(context) { | |
var func = this; | |
var args = slice.call(arguments, 1); | |
function bound() { | |
var invokedAsConstructor = func.prototype && (this instanceof func); | |
return func.apply( | |
// Ignore the context parameter when invoking the bound function | |
// as a constructor. Note that this includes not only constructor | |
// invocations using the new keyword but also calls to base class | |
// constructors such as BaseClass.call(this, ...) or super(...). | |
!invokedAsConstructor && context || this, | |
args.concat(slice.call(arguments)) | |
); | |
} | |
// The bound function must share the .prototype of the unbound | |
// function so that any object created by one constructor will count | |
// as an instance of both constructors. | |
bound.prototype = func.prototype; | |
return bound; | |
}; | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment