Расширения класса в модульном JS - PullRequest
0 голосов
/ 17 мая 2019

Скажем, у меня есть модуль универсального класса:

export class MyCalc {
    data = {}
    ...
}

И, скажем, я хочу расширить функциональность:

export class MyCalcLoader {
    load = some_data => {
        this.data = some_data;
    }
}

export class MyCalcUI {
    print = () => {
        document.write(JSON.stringify(this.data));
    }
}

Как правильно расширить MyCalc, а также использовать эти расширения / плагины?

import {MyCalc} from "./MyCalc.js";
import {MyCalcLoader} from "./MyCalcLoader.js";
import {MyCalcUI} from "./MyCalcUI.js";

// TODO: MakeMyCalcExtendLoaderAndUi();

class BankingCalc extends MyCalc {
    config = {...}
    constructor() {
        super();
    }
}

const banking_calc = new BankingCalc();
banking_calc.load({...});
banking_calc.print();

Я продумал несколько разных хитрых способов сделать это, но я уверен, что это достаточно распространено, и что есть правильный способ сделать это с ванильным ES6.

1 Ответ

1 голос
/ 17 мая 2019

Вы можете использовать Mixins:

 export const MyCalcLoader = Super => class MyCalcLoader extends Super {
  load = some_data => {
    this.data = some_data;
  }
 }

 export const MyCalcUI = Super => class MyCalcUI extends Super {
   print = () => {
     document.write(JSON.stringify(this.data));
  }
}

Затем составьте класс как:

 class BankingCalc extends MyCalcLoader(MyCalcUI(MyCalc)) {
  //...
 }
...