我在 NodeJs 中遇到了 instanceof 的奇怪行为。我正在尝试创建一个引发异常的模块,这些异常可以通过使用模块来捕获并根据异常类型进行处理。然而,测试类型“ error instanceof mod.MyException ”的调用总是返回false。
mymodule.js:
function MyException() {}
MyException.prototype = new Error();
MyException.prototype.constructor = MyException;
function Foo() {
throw new MyException();
}
exports.Foo = Foo;
exports.MyException = MyException;
我的消费模块.js
var mod = require('mymodule');
try {
mod.Foo();
} catch (error) {
if (error instanceof mod.MyException) { // always returns false
//do error specific handling (never executes)
return;
}
// generic handling
}
如果我像这样在 mymodule.js 中进行 instanceof 测试,它会返回 true
mymodule.js
var a = new MyException()
console.log(a instanceof MyException); //true
但是,如果我在消费模块中创建一个异常并对其进行测试,它会正确地将其识别为 MyException,但在将其与另一个模块创建的异常进行比较时,它不会。
我的消费模块.js
var mod = require('mymodule')
var b = new mod.MyException();
console.log(b instanceof mod.MyException); // true