【问题标题】:Increase values of object in array by using function使用函数增加数组中对象的值
【发布时间】:2019-10-23 11:00:48
【问题描述】:

我开始从事原型设计,但我缺少很多知识。

目前我有一个案例。我用数组创建新对象作为员工的价值,每个员工都有年龄属性。我想在我的函数内部扩展数组映射,这样我就可以通过特定函数迭代和更改值,称为 increaseAge。

function increaseAge(amount) {
  this.age += amount;
}
function Administration(employees) {
  this.employees = employees;
  
  Array.prototype.increaseAge = function(amount) {}
}

const newAdministration = new Administration([{ age: 1}, { age: 1}]);
newAdministration.employees.increaseAge(1);

console.log(newAdministration)

如何通过调用 increaseAge 为每个员工增加特定值的结果? 掌握 JavaScript 这门学科的最佳知识来源在哪里?

【问题讨论】:

  • employees 将是一个数组。所以你必须使用索引或循环访问。 (newAdministration.employees[0].increaseAge(1);)
  • 不要做Array.prototype.increaseAge = function(amount) {}。有一个更好的方法可以解决您的问题(无论如何将这个赋值放在构造函数中是没有意义的)。你到底想达到什么目的?请详细说明问题。 (例如,你想增加所有员工的年龄还是只增加其中一名员工的年龄?如果是后者,你想如何选择哪一名?等等)
  • @sandrooco:不,increaseAge 不存在于数组内的对象上。
  • @FelixKling +1。不要修改 javascript 默认对象。
  • @wudoem:如果您要问的话,有多种方法可以遍历数组。如果你想为每个年龄添加1,你可以做employees.forEach(e => e.age += 1)

标签: javascript oop prototype


【解决方案1】:

increaseAge 不应该是 Array.prototype 上的方法(将其添加到所有数组),而是 Administration.prototype 上的方法。然后你可以使用我评论中提到的employees.forEach

function Administration(employees) {
  this.employees = employees;
}

Administration.prototype.increaseAge = function(amount) {
  this.employees.forEach(function(employee) {
    employee.age += amount;
  });
};

const newAdministration = new Administration([{ age: 1}, { age: 1}]);
newAdministration.increaseAge(1);

console.log(newAdministration)

更现代的版本是使用类语法,它隐藏了整个原型业务。

class Administration {
  constructor(employees) {
    this.employees = employees;
  }

  increaseAge(amount) {
    this.employees.forEach(employee => employee.age += amount);
  }
}

const newAdministration = new Administration([{ age: 1}, { age: 1}]);
newAdministration.increaseAge(1);

console.log(newAdministration)

【讨论】:

  • 这不是答案。这确实应该被迭代,但值的变化应该由位于顶部的函数 ageIncrease() 发生。
  • 当然是答案。我只是提供一种方法。您可以根据自己的具体情况采用它。您可以根据需要组织代码。你可以做this.employees.forEach(function(employee) { increaseAge.call(employee, amount); });
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 2022-01-08
  • 2017-04-25
  • 2021-01-13
  • 2022-01-15
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
相关资源
最近更新 更多