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 ? this : oThis || window, aArgs.concat(Array.prototype.slice.call(arguments)));
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
这是bind MDC的选择,我不明白this instanceof fNOP ? this
在做什么。请问有人教我吗?我想知道为什么不直接使用oThis || window
。
答案 0 :(得分:1)
return fToBind.apply(this instanceof fNOP ? this : oThis || window, aArgs.concat(Array.prototype.slice.call(arguments)));
如果this
是fNOP
的实例,则第一个参数将为this
。如果没有,那么它将是oThis
,如果它是“真实的”(非空,未定义且任何与false同义),或window
的{{1}}为假。
这是此代码的简写:
oThis