考虑以下功能:
function bind(fn, context) {
return function() {
return fn.apply(context, arguments);
}
}
此功能是否与Function.prototype.bind
完全相同?
即,鉴于上面的函数定义,下面两行代码应该实现完全相同的东西吗?
boundFunction = bind(someFunction, someContext);
// same same?
boundFunction = someFunction.bind(someContext);
如果有任何微妙或不那么微妙的差异,它们是什么?
(我问,因为我看到上面定义的函数在某些JavaScript中使用,我想知道他们为什么不简单地使用Function.prototype.bind
。)
答案 0 :(得分:0)
因此,在评论的基础上,这似乎就是答案:
在我的例子中,两行......
boundFunction = bind(someFunction, someContext);
boundFunction = someFunction.bind(someContext);
......确实取得了同样的结果。
然而,"绑定"以这种方式定义的函数不提供绑定其他参数的可能性,如Function.prototype.bind
那样,即这样的事情:
function abc(a, b, c) {
console.log('a: '+a, 'b: '+b, 'c: '+c);
}
// This function predefines the first argument for abc:
var bc = abc.bind(undefined, 'Ay!');
abc('Yo!', 'hello', 'world');
// a: Yo! b: hello c: world
bc('hello', 'world');
// a: Ay! b: hello c: world