ES6 - Динамическое расширение класса и instanceof - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь динамически создать дерево наследования классов и проверить его тип. enter image description here

let myFunc = function ( Superclass = Object ) {
        return class Clickable extends Superclass {
            constructor( args ) {
                super( args );
            }
            click() {}
        };
    };
console.log(myFunc);
console.log(myFunc());
let obj = new (class Q extends myFunc() {})();
console.log(obj);
console.log(obj instanceof myFunc());

instanceof возвращает false.

Я думаю, что по той же причине следующее возвращает false. enter image description here

Но мне трудно понять, почему именно он возвращает ложь. Во всяком случае, я бы ожидал, что он дважды скажет: «Идентификатор Y уже объявлен».

Есть ли обходной путь для этого? (Очень грязное) решение состоит в том, чтобы проверить, определен ли Q методом "click".

1 Ответ

0 голосов
/ 07 сентября 2018

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

console.log(myFunc() === myFunc());    // false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...