41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
|
/////////////////////////////////////
|
||
|
// Taken from ariya/phantomjs#10522
|
||
|
//
|
||
|
|
||
|
|
||
|
Function.prototype.bind = function bind(that) { // .length is 1
|
||
|
var target = this;
|
||
|
if (typeof target != "function") {
|
||
|
throw new TypeError("Function.prototype.bind called on incompatible " + target);
|
||
|
}
|
||
|
var args = Array.prototype.slice.call(arguments, 1); // for normal call
|
||
|
var bound = function () {
|
||
|
|
||
|
if (this instanceof bound) {
|
||
|
|
||
|
var result = target.apply(
|
||
|
this,
|
||
|
args.concat(Array.prototype.slice.call(arguments))
|
||
|
);
|
||
|
if (Object(result) === result) {
|
||
|
return result;
|
||
|
}
|
||
|
return this;
|
||
|
|
||
|
} else {
|
||
|
return target.apply(
|
||
|
that,
|
||
|
args.concat(Array.prototype.slice.call(arguments))
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
function Empty() {};
|
||
|
if(target.prototype) {
|
||
|
Empty.prototype = target.prototype;
|
||
|
bound.prototype = new Empty();
|
||
|
Empty.prototype = null;
|
||
|
}
|
||
|
return bound;
|
||
|
};
|