У меня есть несколько классов ES6 с наследованием.
Базовый класс имеет несколько методов, которые наследуются всем дочерним классам. Проблема: эти методы используют stati c массивы, специфицирующие c для дочерних классов.
У каждого дочернего класса есть отдельный метод «add» для адресации различных параметров.
Теперь я надеваю Не знаю, как я могу использовать методы с каждым отдельным свойством массива stati c. Поскольку методы одинаковы для каждого дочернего класса, я не хочу дублировать код в каждом дочернем классе, если это возможно.
Некоторые идеи, как решить эту проблему?
Код:
class Model extends EventEmitter {
constructor(){
super();
this.id = Math.max(...Model.all.map(item => item.id + 1), 1)
}
static all = []; // All items
// Problem: 'Model.all' hereunder is wrong because this array does not exist in child classes.
// Instead, each child class has its own static array 'all'.
get(id){
var found;
Model.all.forEach(item => {
if(item.id == id){ found = item; }
});
return found;
}
change(id, property, newValue){
let obj = this.get(id);
let index = Model.arr.indexOf(obj);
obj[property] = newValue;
Model.arr.splice(index, 1, obj);
return obj;
}
remove(id){
let obj = this.get(id);
let index = Model.arr.indexOf(obj);
return Model.arr.splice(index, 1);
}
}
class Risk extends Model {
constructor(criteria, weight, rating, comment){
super();
this.add(criteria, weight, rating, comment);
}
static all = [];
add(criteria, weight, rating, comment){
Risk.all.push({
criteria,
weight,
rating,
comment,
result: this.rating * 3,
id: Math.max(...Risk.all.map(risk => risk.id + 1), 1)
});
}
}