我有一个A类是从ExtJs 4.x中的B类扩展而来的。是否有函数判断类A从类B中扩展,如Java中的“if(obj instanceof Class)”。
答案 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
}
修改强>
由于另一个问题,我偶然发现了另一种似乎有用的方式。
您可以使用self
,superclass
和$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
您可以简单地构建递归方法,检查并返回true
或false
。但同样,instanceof
运算符可能会快得多!
答案 2 :(得分:0)
要扩展@ sra的建议,您还可以在组件级别使用 isXType()
:http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.AbstractComponent-method-isXType