JavaScript:编写函数,将一个对象和一个函数数组作为输入参数,return 一个数组

JavaScript: Write Function that take an object and an array of functions as input args and return an array

我想要一个对象和一个函数数组,return 一个数组。我在这里尝试使用 for 循环。

我有以下代码:

const fnArr = [
      function firstName() {
        return this.first;
      },

      function lastName() {
        return this.last;
      },
    ];

const obj = { first: 'Nimit', last: 'Maru' };

function callAll(obj, fnArr){

  let newArray = [];

  for (let i=0; i<fnArr.length; i++){
    let eachFunc = fnArr[i]; 

    return newArray.push(eachFunc.call(obj))
  }
}

callAll(obj, fnArr)

我的预期输出是:

['Nimit', 'Maru']

但是我个人代码的输出是 returning: 1

问题 1:我做错了什么?

////////////////////////////////////////// //////////////////////////////////////////////// /////////////

此外,我得到的解决方案如下:

const fnArr = [
          function firstName() {
            return this.first;
          },

          function lastName() {
            return this.last;
          },
        ];


const obj = { first: 'Nimit', last: 'Maru' };


const callAll = (obj, fnArr) => {
  return fnArr.map(fn => {
    return fn.call(obj);
  });
};

它给出了正确的答案。

问题2:上面的解决代码中,为什么需要"return fn.call(obj)"中的call方法?

对于在这些情况下何时需要或不需要调用的概念性解释将不胜感激。

你在每个循环中 returning。所以在第一个循环之后函数结束并且代码不会进一步执行。

它 returns 1 因为 push() 方法 returns 向数组添加元素后的长度。添加 1 个元素时,最初数组为空 returns 1.

你不一定要使用 map() 只是 push() 元素(不要 return)。和 return newArray after 循环。

const fnArr = [
      function firstName() {
        return this.first;
      },

      function lastName() {
        return this.last;
      },
    ];

const obj = { first: 'Nimit', last: 'Maru' };

function callAll(obj, fnArr){

  let newArray = [];

  for (let i=0; i<fnArr.length; i++){
    let eachFunc = fnArr[i]; 

    newArray.push(eachFunc.call(obj))
  }
  return newArray
}


console.log(callAll(obj, fnArr))

In the solution code above, why do I need the call method in "return fn.call(obj)"?

函数的 this 绑定取决于函数的调用方式。如果函数作为对象的方法被调用,则对象将绑定到该方法。

在上面的代码 this 中,如果它们被正常调用,您的两个函数将 referwindow 对象。所以我们希望 this 引用对象,所以我们使用 call

Why eachFunc(obj) returns [undefined, undefined]?

当您不使用 call 时,this 将引用 window 对象。所以在 window 对象上没有 属性 命名为 firstlast 所以它 returns undefined