繁体   English   中英

在ExtJS中销毁一个组件后,对引用变量的处理是什么?

[英]What happens to the reference variable after a Component is destroyed in ExtJS?

ExtJS的新功能。 我有以下代码。

var comp;
console.log('comp is - ' + comp);
comp = Ext.create('Ext.Component', {
    listeners : {
        beforedestroy : function(comp) {
            console.log('beforedestroy .. ');
        },
        destroy : function(comp) {
            console.log('destroy .. ');
        }
    }
});
console.log('comp is - ' + comp);
console.log('comp id is - ' + comp.getId());
comp.destroy();
console.log('comp is - ' + comp);
console.log('comp id is - ' + comp.getId());

chrome的控制台输出是

comp is - undefined
comp is - [object Object]
comp id is - component-1009
beforedestroy .. 
destroy .. 
comp is - [object Object]
comp id is - component-1009

看起来即使在销毁组件之后,该变量仍保留着对原始组件的引用。 我期望变量销毁后具有未定义或null的值。 这是正常行为吗?

Ext-JS不可能使您对现有组件的引用无效,因为JavaScript没有类似C ++的引用。

例如:

var a = {b:2};
var b = a;  
// a and b both reference `{b:2}`, there is nothing you can do 
// to `{b:2}` that would change a or b to be null

您可以使用未记录的isDestroyed属性检查组件是否被销毁。

comp.isDestroyed // true

您还将注意到该组件已从注册表中删除

Ext.getCmp(comp.id); // undefined

您看到的行为与文档所声称的一致。

尝试通过删除所有事件侦听器,将它们从DOM中删除(如果适用)并调用其destroy函数(如果可用)来破坏传递给它的任何对象。 此方法主要用于Ext.Element和Ext.Component类型的参数,但可以传入Ext.util.Observable的任何子类。可以在单个调用中将任意数量的元素和/或组件传递给此函数,如下所示:单独的参数。

来源-http://docs.sencha.com/extjs/4.2.1/#!/api/Ext - method - destroy

如果您查看源代码,它不会删除任何地方的实际组件。 也就是说,该组件在调用销毁后实际上将是无用的,但这与被垃圾回收的对象不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM