В приложении NodeJS я пытаюсь проверить, что значение, переданное в функцию, является экземпляром определенного класса, однако я получаю неожиданное поведение при использовании instanceof
между модулями и при проверке равенства класса.
endpoint.js
import SomeClass from 'utils/class';
import SomeModel from 'models/model';
const model = SomeModel.findOne({id: 'abc'});
const values = {a: 'b'};
const classInstance = new SomeClass({id: 'def'});
classInstance instanceof SomeClass //returns true
Object.getPrototypeOf(classInstance) //returns SomeClass {}
model.update(values, { a: classInstance, b: SomeClass });
Когда classInstance передается в функцию обновления, я вижу непредвиденное поведение.
Вызов Object.getPrototypeOf(a)
возвращает SomeClass, как и a.constructor.name
.Однако a instanceof SomeClass
возвращает false.
Кроме того, просто проверка равенства между импортируемым классом и классом, переданным в функцию, возвращает false.
require.resolve('utils/class')
возвращает одинаковый путь для обоих импортов.
models / model.js
import SomeClass from 'utils/class';
class Model {
async update(values, injections) {
const { a, b } = injections;
// checking instance
a.constructor.name //returns SomeClass
Object.getPrototypeOf(a) //returns SomeClass {}
a instanceof SomeClass; //returns false
// checking class
b === SomeClass; //returns false
}
}
Я ожидаю, что b === SomeClass
вернет true, так же, какa instanceof SomeClass
также должен возвращать true, если я что-то упустил.Спасибо за любую помощь.
utils / class.js
export default class SomeClass {
constructor(foo) {
this.bar = foo;
}
}
Редактировать: Код передается с помощью @ std / esm.NODE_PATH=./src/ nodemon -r @std/esm src/server.js