Javascript ES6类继承静态属性

时间:2020-01-29 10:12:45

标签: javascript class inheritance methods ecmascript-6

我有一些具有继承性的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) 
        });
    }
}

0 个答案:

没有答案
相关问题