JavaScript:编写将对象和函数数组作为输入参数并返回数组的函数

松子0

我想获取一个对象和一个函数数组并返回一个数组。我试图在这里使用 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']

但是我个人代码的输出正在返回: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方法?

在这些类型的情况下何时需要或不需要呼叫的概念性解释将不胜感激。

马赫阿里

您将在每个循环中返回。所以在第一个循环之后,函数结束,代码不再执行。

它返回1是因为push()方法在向数组添加元素后返回数组的长度。当添加 1 个元素时,数组最初为空,它返回1

您不必map()push()使用元素(不要返回)。并返回newArrayafter 循环。

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))

在上面的解决方案代码中,为什么我需要“return fn.call(obj)”中的call方法?

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

在上面的代码中如果它们被正常调用,this你的两个函数都会反对。所以我们想引用对象所以我们使用referwindowthiscall

为什么eachFunc(obj) 返回[undefined, undefined]?

不使用时call this将引用window对象。因此,有没有属性命名first,并lastwindow对象使其返回undefined

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

编写一个接受测试分数数组作为参数的函数,然后该函数应该返回 80 或更高的分数?

如何基于函数参数数组返回类型化的对象?

在Golang中作为参数的函数数组

从函数返回数组作为参数时,为什么从函数数组中获取随机值?

使用 jQuery 和 Javascript 将包含用户输入内容的函数数组返回到 UI

Kotlin-将函数数组作为函数的参数传递

JavaScript函数数组

如何基于输入参数数组在函数内部执行函数?

如何在JavaScript中使用数组和对象输入编写最快的选择函数?

JavaScript:函数创建数组作为返回对象的值

C-返回数组作为函数参数

数组作为对象构造函数中的参数

如何使用 SQL API 将对象的 JSON 数组作为参数传递给 ARRAY_CONTAINS 函数

数组作为函数的参数

C中函数数组的参数传递/返回,

如何将对象传播为方法输入参数而不是参数数组?

在JavaScript中将数组作为函数参数传递

使用 php 数组作为 JavaScript 函数的参数

在Javascript中将对象作为参数传递给函数

javaScript-将对象作为函数参数传递

Javascript/Typescript 关闭问题 - 将对象的函数作为变量返回

如何键入一个将对象数组作为第一个参数,并将对象上期望的特定属性作为参数的打字稿函数?

返回数组的函数,但也将函数作为参数

函数接收char数组作为参数并返回char数组

无法在JavaScript中的变长参数数组上运行函数

如何序列化返回Promises的Javascript函数数组?

JavaScript作用域:在函数数组中保留对象

如何编写一个返回函数数组的函数?

返回对象和函数打字稿的数组