我有一些具有继承性的ES6类。
基类具有一些继承给所有子类的方法。 问题:这些方法使用特定于子类的静态数组。
每个子类都有一个单独的“添加”方法来解决不同的参数。
现在,我不知道如何将每个静态数组属性都使用这些方法。 由于每个子类的方法都相同,所以我不想在每个子类中都重复代码。
一些想法如何解决这个问题?
代码:
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)
});
}
}