我正在使用以下 JS 代码(在 Thunderbird 115.2.0 中):
Foo.createTextWalker = function (doc, node, filter) {
return doc.createTreeWalker(node, NodeFilter.SHOW_TEXT, filter);
};
Foo.bar = function (document, nodeFilter, element, expression) {
let textWalker = Foo.createTextWalker(document, element, nodeFilter);
let node;
while (node = textWalker.nextNode()) { // line XXX
// do stuff
}
// do other stuff
};
这会引发异常:
TypeError: Illegal constructor. foo.js:XXX:28
我不明白为什么会发生这种情况。
textWalker
是 TreeWalker
类型的对象;为什么调用它的 nextNode
方法会被解释为构造?
看起来 - 虽然我还没有 100% 验证这一点 - 异常是从 within
nativeCode()
抛出的,很可能是在尝试应用无效的过滤器参数时。
现在,
nextNode()
是一个具有本机代码的函数,因此异常的跟踪仅到达调用它的位置可能是有意义的。