这本书YDKJS包含描述soft binding实用程序的部分:
if (!Function.prototype.softBind) {
Function.prototype.softBind = function(obj) {
var fn = this,
curried = [].slice.call( arguments, 1 ),
bound = function bound() {
return fn.apply(
(!this ||
(typeof window !== "undefined" &&
this === window) ||
(typeof global !== "undefined" &&
this === global)
) ? obj : this,
curried.concat.apply( curried, arguments )
);
};
bound.prototype = Object.create( fn.prototype );
return bound;
};
}
我无法理解以下行:curried.concat.apply( curried, arguments )
。为什么我们将已经咖喱的论点与
arguments对象,而不是简单地使用curried数组:
...
) ? obj : this,
curried
);
};
bound.prototype = Object.create( fn.prototype );
...
答案 0 :(得分:2)
调用绑定函数时,首先会传递绑定参数,然后是从调用到绑定版本的新参数。
即
function log(a, b, c, d, e) {
console.log([a, b, c, d, e]);
}
log(1, 2, 3, 4, 5);
const bound = log.bind(null, 1, 2, 3);
bound(4, 5);
如果您不使用边界参数和新参数,则只能记录1、2和3。