ES6-动态类扩展和instanceof

时间:2018-09-07 02:15:22

标签: javascript ecmascript-6

我正在尝试动态实例化一个类继承树,并能够对其进行类型检查。 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

但是我很难理解为什么它确实返回false。 如果有的话,我希望它会说两次“标识符Y已经被声明”。

  

是否可以解决此问题?   (非常脏)的解决方案是检查Q是否定义了“点击”方法。

1 个答案:

答案 0 :(得分:1)

这是因为每次调用myFunc时,都会定义一个新类,然后返回。这些类不同,因此这些实例显然不能同时是多个类的实例。为了证明返回的类不相同,只需进行简单的检查即可:

console.log(myFunc() === myFunc());    // false