我有功能
function bind(method, context) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
var a = args.concat(Array.prototype.slice.call(arguments, 0));
return method.apply(context, a);
}
}
问题是:这个功能如何工作以及它可以用什么。
我理解函数bind(以及返回函数)将类似数组的参数转换为实数数组。方法和上下文不会转换为数组(因为2索引)。我可以将bind函数和args中的额外args传递给返回的函数,并将上下文调用方法作为'这个'。
我的问题是 - 在什么情况下如何使用它。方法和上下文 - 函数或对象,还是函数和对象?
答案 0 :(得分:1)
此函数通常用于生成事件处理函数。
例如,当你为一个事件订阅你的函数并调用该函数时,this
取决于你的处理程序调用。
如果您传递对象的方法而不是函数,则需要this
访问您的对象。
函数前2个参数是方法(要绑定的函数),上下文(要在this
上访问的对象),并且可以添加一些其他固定参数,这些参数将通过每次调用你的处理函数。
然后该函数返回一个新函数,用于订阅所需的事件监听器,此函数获取此事件传递的所有参数并添加到arguments数组中。
最后用apply
进行魔术,允许你调用一个函数来改变上下文并传递一个任意数组作为函数的参数。
您不仅可以在事件订阅中使用此类函数,还可以在数组forEach
,map
等调用中使用此类函数。