JavaScript:调用类对象的函数将值添加到对象数组中

时间:2019-08-11 17:17:21

标签: javascript function class object methods

我下面的代码定义了一个对象“想法”,并创建了一个名为“目标”的类对象:

let ideas = {};

class Goals {
  constructor () {

  }
}

然后,下面还有另一个代码块,显示了将在类对象上调用的函数的列表:

module.exports = {
  reset: function() {
    ideas = {}; 
  },
  add: function(name, task) {
    // saves a task for a given person
    ideas[name] = task;
  }
};

Goals.add("college", { content: "apply to 4 schools" });

运行上面的代码时,出现以下错误:

TypeError: Goals.add is not a function

我希望在task对象中返回以下内容:

{ college: [{apply to 4 schools}] } 

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

我相信您正在寻找类似的东西。

class Goals {
  constructor() {
    this.ideas = {};
  }
  reset() {
    this.ideas = {};
  }
  add(name, task) {
    // saves a task for a given person
    this.ideas[name] = task;
  }
}

var goal = new Goals();

goal.add("college", {
  content: "apply to 4 schools"
});

console.log(goal);

答案 1 :(得分:0)

在当前代码中,导出的内容与在Goals类上调用的方法之间没有链接,您需要在定义class Goals的代码中导入该模块并添加在类中作为 static 方法导入的必需函数,例如:

    //const action = require('path/to/add/reset/module'); if your intention is to make it re-usable
    //emulating an import
    const action = {
          reset: function() {
          ideas = {}; 
      },
          add: function(name, task) {
          // saves a task for a given person
          ideas[name] = ideas[name] ? ideas[name].concat(task) : [task];
      }
    };

    let ideas = {};
    
    class Goals {
      constructor () {
    
      }
      
      static add(name, task){
        action.add(name, task);
      }
      
      add(name, task){
        action.add(name, task);
      }
    
    }
    Goals.add("college", { content: "apply to 4 schools" });
    console.log(ideas);
    //better way
    const goals = new Goals();
    goals.add("college", { content: "apply to 2 schools" });
    console.log(ideas);

答案 2 :(得分:0)

目标可能应该拥有自己的idea属性和操纵它们的方法,例如

class Goals {
  constructor() {
    this.ideas = {};
  }

  add(name, task) {
    this.ideas[name] = task;
  }

  reset() {
    this.ideas = {};
  }
}

这在某种程度上取决于您的用例,但是如果您需要有两个不同的目标对象(即,如果您有针对不同用户的目标),则绝对有必要基于实例。