Множественное наследование/прототипы в JavaScript

Я пришел к моменту, когда мне нужно иметь что-то вроде рудиментарного множественного наследования в JavaScript. (Я здесь не для того, чтобы обсуждать, хорошая это идея или нет, поэтому прошу оставить эти комментарии при себе.)

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

Если говорить кратко, то мне нужно, чтобы объект мог унаследовать свойство от более чем одного прототипа chain (т.е. каждый прототип мог бы иметь свою собственную цепочку), но в заданном порядке старшинства (он будет искать в цепочках по порядку первое определение).

Чтобы продемонстрировать, как это теоретически возможно, можно было бы достичь этого, присоединив вторичную цепочку к концу первичной цепочки, но это повлияет на все экземпляры любого из предыдущих прототипов, а это не то, чего я хочу.

Мысли?

126
задан devios1 11 February 2019 в 23:40
поделиться

1 ответ

Я просто раньше присваивал, в каких классах я нуждаюсь в свойствах других и добавляю прокси для автоуказывания им, мне нравится:

class A {
    constructor()
    {
        this.test = "a test";
    }

    method()
    {
        console.log("in the method");
    }
}

class B {
    constructor()
    {
        this.extends = [new A()];

        return new Proxy(this, {
            get: function(obj, prop) {

                if(prop in obj)
                    return obj[prop];

                let response = obj.extends.find(function (extended) {
                if(prop in extended)
                    return extended[prop];
            });

            return response ? response[prop] : Reflect.get(...arguments);
            },

        })
    }
}

let b = new B();
b.test ;// "a test";
b.method(); // in the method
0
ответ дан 24 November 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: