Я встречаю странное поведение с экземпляром в NodeJs. Я пытаюсь создать модуль, который генерирует исключения, которые могут быть пойманы путем использования модулей и обработаны на основе типа исключения. Однако вызов для проверки типа "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;
myconsumingmodule.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
}
Если я делаю экземпляр test в mymodule.js, например, он возвращает true
mymodule.js
var a = new MyException()
console.log(a instanceof MyException); //true
Однако, если я создаю исключение в модуле потребления и проверяю его, он правильно идентифицирует его как MyException, он просто не сравнивает его с исключением, созданным другим модулем.
myconsumingmodule.js
var mod = require('mymodule')
var b = new mod.MyException();
console.log(b instanceof mod.MyException); // true