检查对象是否是mixin的instanceof

Nik*_*ams 2 extjs

我想检查对象是否x实现(是) mixin MyInterface

Ext.define('MyInterface', {
    interfaceMethod: Ext.emptyFn
});

Ext.define('Foo', {
    mixins: {
        myInterface: 'MyInterface'
    }
});

var x = new Foo();
Run Code Online (Sandbox Code Playgroud)

不起作用:

console.log(x instanceof MyInterface);
Run Code Online (Sandbox Code Playgroud)

丑陋的解决方法:

var isInstanceOfMyInterface = false;
for (var i in x.mixins) {
    if (x.mixins[i].$className == 'MyInterface') {
        isInstanceOfMyInterface = true;
    }
}
console.log(isInstanceOfMyInterface);
Run Code Online (Sandbox Code Playgroud)

解决方法有一个主要问题:如果使用 MyInterface 的子类,则它不起作用。

提琴手

Eva*_*oli 5

Ext 核心使用的一种模式是应用 mixin 特定属性,以便您可以测试它的存在。它也比instanceof check便宜很多。例如:

Ext.define('MyInterface', {
    isMyInterface: true,
    interfaceMethod: Ext.emptyFn,
});

Ext.define('Foo', {
    mixins: {
        myInterface: 'MyInterface'
    }
});

var x = new Foo();
console.log(x.isMyInterface);
Run Code Online (Sandbox Code Playgroud)