首页 > 解决方案 > 在动态命名的对象中调用方法

问题描述

我正在尝试调用动态命名对象的方法。

我有几个对象,每个对象都包含一个名为“getWeight”的方法。我需要调用这些对象子集的这个方法。但是,对象的子集取决于用户输入的信息,这就是我尝试动态构造对象名称并在循环中调用它的“getWeight”方法的原因。

我的代码如下:

// Importing objects containing 'getWeight' method
const Apple = require('../classses/Apple');
const Pear = require('../classes/Pear);
const Carrot = require('../classes/Carrot);
const Potato = require('../classes/Potato);

const promises = {};
const user = 'userX';  // This is the inputted info, could also equal 'userY'.
const searchableFoods = {
  userX: ['Apple', 'Pear'],
  userY: ['Carrot', 'Potato']
};

for (i = 0; i < searchableFoods[user].length; ++i) {
  promises[searchableFoods[user][i]] = new Promise(function(resolve, reject) {
    // Below line should behave like: Apple.getWeight(arg1, function....
    searchableFoods[user][i].getWeight(arg1, function(response) {
      resolve(response);
    })
  })
}

不幸的是,我收到此错误:

[searchableFoods[user][i].getweight] is not a function

我尝试了许多变体,但无法使其工作。是否有可能做到这一点?

标签: node.js

解决方案


你能定义不使用字符串的数组吗?类似的东西?

const searchableFoods = {
  userX: [Apple, Pear],
  userY: [Carrot, Potato]
};

推荐阅读