为什么 KeyboardEvent.target object return false 在 "is" 条件下将其与其类型进行比较?

Why does KeyboardEvent.target object return false on "is" condition comparing it to its type?

我有一个自定义皮肤的 spark 的 RichEditableText 组件。我在我的应用程序中有一个键盘事件侦听器,用于一些自定义热键。如果我正在写入 RichEditableText,我想跳过这些热键,所以我添加了这个:

if (event.target is RichEditableText) {
    return;
}

但由于某种原因,这不起作用。所以我使用了 getQualifiedClassName(event.target) 并得到了 spark.components::RichEditableText。我是这样导入的:

import spark.components.RichEditableText; 

为什么原来的条件不行?

编辑:

这里有更彻底的记录:

log.info("event.target is RichEditableText " + (event.target is RichEditableText));
log.info("event.target instanceof RichEditableText " + (event.target instanceof RichEditableText));
log.info("event.target.constructor == RichEditableText " + (event.target.constructor == RichEditableText));
log.info("Class(getDefinitionByName(getQualifiedClassName(event.target))) == RichEditableText " + (Class(getDefinitionByName(getQualifiedClassName(event.target))) == RichEditableText));
log.info("event.target actually is " + getQualifiedClassName(event.target));

结果:

false
false
false
true
spark.components::RichEditableText

出于某种原因,只有最慢和最复杂的方法有效。我可以使用它,但如果有人可以分享他们对为什么其他人不起作用的想法,那就太好了。

当侦听器和事件源位于不同的应用程序域中时,可能会发生这种情况。这样您就可以拥有完全相同的限定名称,但它们后面的 class 不同。

getDefinitionByName() 使用您从中调用它的范围的当前应用程序域。因此,在唯一成功的日志行中,您将当前域中的 class 与也在当前域中的 RichEditableText 引用进行比较,这自然会产生 true.