Javascript 尝试理解为什么在实现下划线';s调用函数
我正在尝试实现Underline JS的3;.invoke函数。它应该做的是:对列表中的每个值调用methodName命名的方法。传递给invoke的任何额外参数都将转发给方法调用 以下是实施方案:Javascript 尝试理解为什么在实现下划线';s调用函数,javascript,Javascript,我正在尝试实现Underline JS的3;.invoke函数。它应该做的是:对列表中的每个值调用methodName命名的方法。传递给invoke的任何额外参数都将转发给方法调用 以下是实施方案: _.invoke = function(list, methodName, arguments) { return _.map(collection, function(item){ if (typeof methodName === 'string'){
_.invoke = function(list, methodName, arguments) {
return _.map(collection, function(item){
if (typeof methodName === 'string'){
return item[methodName](arguments);
} else {
return methodName.apply(item, arguments);
}
});
};
我目前正在学习.call和.apply方法,但不理解为什么需要使用.apply。使用apply和简单编写返回函数workey(item,args)
之间有什么区别?的第一个参数在调用的函数中设置此的值。这么写
methodName.apply(item, arguments);
与
item.methodName(argument1, argument2 /*, ...*/);
如果item
没有方法methodName
,但您想将methodName
当作item
的属性来使用,那么您需要如上所示使用apply
(或者调用
,如果您知道每个参数是什么)。区别在于上下文。call/apply允许您指定被调用函数中的“this”
methodName.apply(item, arguments);
使用此=项运行methodName,其中
return functionOrKey(item, args)
将调用函数中的当前上下文用作“this”首先,使用参数作为参数/变量名在严格模式下无效。