如何知道A类是从ExtJs中的B类扩展而来的

时间:2013-11-27 12:33:06

标签: extjs

我有一个A类是从ExtJs 4.x中的B类扩展而来的。是否有函数判断类A从类B中扩展,如Java中的“if(obj instanceof Class)”。

3 个答案:

答案 0 :(得分:2)

JS有一个instanceof运算符:

Ext.define('A', {
});

Ext.define('B', {
    extend: 'A'
});

Ext.define('C', {
    extend: 'B'
});

Ext.define('D', {
});

console.log(new B() instanceof A);
console.log(new C() instanceof A);
console.log(new D() instanceof A);

答案 1 :(得分:1)

我推荐埃文斯回答!

但是还有其他方法可以使用getXTypes()方法在组件级别上执行此操作,该方法将xType链作为字符串返回。

您需要查找搜索到的窗口小部件(组件)是否是字符串的一部分。

var splitted = ref.getXTypes().split('/'),
    len = splitted.length,
    i = 0;

for(;i < len; i++) {
    if(lookupType == splitted[i])
        // do something
}

修改

由于另一个问题,我偶然发现了另一种似乎有用的方式。

您可以使用selfsuperclass$className属性在类层次结构中向上导航。

以下是一个例子:

Ext.getCmp('customform-1746').self.superclass.$className // echo Ext.form.Panel
Ext.getCmp('customform-1746').self.superclass.self.superclass.$className // echo Ext.panel.Panel

您可以简单地构建递归方法,检查并返回truefalse。但同样,instanceof运算符可能会快得多!

答案 2 :(得分:0)

要扩展@ sra的建议,您还可以在组件级别使用 isXType() http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.AbstractComponent-method-isXType