Расширяет класс ES6 динамически - PullRequest
0 голосов
/ 06 июня 2019

Как легко выполнить смешивание или расширить динамическое наследование нескольких классов в js es6?

// Например, у меня есть 3 класса, но они должны быть расширены из контекста.

class Type1 { constructor() {} };
class Type2 { constructor() {} };
class Type3 { constructor() {} };

// и здесь у меня есть другое наследование классов, но мне не нужен контекст.

/** return dynamically a class*/
function dynamically_Extends(extendsType) {
    switch (extendsType) {
        case 'type1': return Type1 ;break;
        case 'type2': return Type2 ;break;
        case 'type3': return Type3 ;break;
        default: console.error('class not exist') ;break;
    };
};

class AA {
    constructor(type) {
        //not work: example of extend during constructor?
        extends dynamically_Extends(type); 
        super()
    };
};

class A extends AA{
    constructor(type) {
        super(type)
    };
};

то, что я хочу, имеет что-то вроде этого при создании объектов

const obj1 = new A('type1'); // class heritance: A=>AA=>type1
const obj2 = new A('type2'); // class heritance: A=>AA=>type2
const obj3 = new A('type3'); // class heritance: A=>AA=>type3

, которое я хочу, расширяетA 2-й раз, но с динамическим контекстом в соответствии с условиями.Любые советы или простой способ сделать это во время конструктора или после?Я хочу сохранить код класса сахара для всего.

1 Ответ

0 голосов
/ 06 июня 2019

В дополнение ко всем другим классам преимуществ, они также обещают определенный API.Динамическое расширение значительно облегчило бы нарушение таких обещаний.(хотя в любом случае в JS это сделать довольно просто без динамических расширений).Например, obj1 поддерживает Type1.prototype.method1?Type2.prototype.method2?

Альтернативный и более традиционный (благодаря чему его легче поддерживать и читать) подход может состоять в реорганизации иерархии классов.Классы Type1, Type2 и Type3 могут наследоваться от class A.

...