【问题标题】:How to write a function that pushes an object to an array of objects?如何编写一个将对象推送到对象数组的函数?
【发布时间】:2021-08-29 19:06:43
【问题描述】:

我正在尝试创建一个将对象作为参数并将其推入对象数组的函数。

const listOfProjects = [];

function Project(title) {
  this.title = title;
  this.tasks = [];
}
Project.prototype.addProjectToList = function (projectObj) {
  listOfProjects.push(projectObj);
}

function createProject(projectName) {
  const projectObject = new Project(projectName);
  projectObject.addProjectToList(projectName);
}

createProject('Workout');
createProject('Biology');
createProject('JavaScript')

我不知道为什么这会返回一个字符串数组!

【问题讨论】:

  • 你可能错过了projectObject.addProjectToList(projectObject)
  • 任何答案是否有助于解决您的问题?如果是,请选择一项并标记为答案。如果不是,请进一步澄清。谢谢!

标签: javascript arrays object oop


【解决方案1】:

因为您使用名称而不是创建的对象调用addProjectToList

改变

projectObject.addProjectToList(projectName);

projectObject.addProjectToList(projectObject);

const listOfProjects = [];

function Project(title) {
  this.title = title;
  this.tasks = [];
}
Project.prototype.addProjectToList = function (projectObj) {
  listOfProjects.push(projectObj);
}

function createProject(projectName) {
  const projectObject = new Project(projectName);
  projectObject.addProjectToList(projectObject);
}

createProject('Workout');
createProject('Biology');
createProject('JavaScript')


console.log(listOfProjects);

【讨论】:

    【解决方案2】:

    您将名称而不是新创建的对象推送到数组中。混淆可能源于与实例同名的对象。

    const listOfProjects = [];
    
    function Project(title) {
      this.title = title;
      this.tasks = [];
    }
    Project.prototype.addProjectToList = function (projectObj) {
      listOfProjects.push(projectObj);
    }
    
    function createProject(projectName) {
      projectObject = new Project(projectName);
      projectObject.addProjectToList(projectObject);
    }
    
     let projectObject 
    createProject('Workout');
    createProject('Biology');
    createProject('JavaScript')
    
    console.log(projectObject)
    console.log(listOfProjects)

    【讨论】:

      【解决方案3】:

      您需要推送 this 引用来保存对象上下文,同时您将 projectName 作为参数传递,而不是对象本身,如果您有 this 引用,不要像 arg 一样传递它。

      const listOfProjects = [];
      
      function Project(title) {
        this.title = title;
        this.tasks = [];
      }
      Project.prototype.addProjectToList = function () {
        listOfProjects.push(this);
      }
      
      function createProject(projectName) {
        const projectObject = new Project(projectName);
        projectObject.addProjectToList();
      }
      
      createProject('Workout');
      createProject('Biology');
      createProject('JavaScript');
      
      console.log(listOfProjects);

      【讨论】:

      • 如何让这个方法(addProjectToList)适用于任何数组,而不仅仅是(listOfProjects)数组?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多