Javascript Класс наследования ES6 stati c свойство - PullRequest
0 голосов
/ 29 января 2020

У меня есть несколько классов 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) 
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...