Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试理解为什么在实现下划线';s调用函数_Javascript - Fatal编程技术网

Javascript 尝试理解为什么在实现下划线';s调用函数

Javascript 尝试理解为什么在实现下划线';s调用函数,javascript,Javascript,我正在尝试实现Underline JS的3;.invoke函数。它应该做的是:对列表中的每个值调用methodName命名的方法。传递给invoke的任何额外参数都将转发给方法调用 以下是实施方案: _.invoke = function(list, methodName, arguments) { return _.map(collection, function(item){ if (typeof methodName === 'string'){

我正在尝试实现Underline JS的3;.invoke函数。它应该做的是:对列表中的每个值调用methodName命名的方法。传递给invoke的任何额外参数都将转发给方法调用

以下是实施方案:

    _.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”

首先,使用
参数作为参数/变量名在严格模式下无效。