Поскольку es6 не поддерживает вложенные классы, я решил добавить вложенный класс к получателю c родительского состояния. Например:
class Dictionary {
static get Category () {
return class Category {
static is (inst) {
return inst instanceof Category
}
constructor () {}
}
}
}
Однако у меня проблема с instanceof
. Я хочу убедиться, что данная переменная является правильным экземпляром.
const test = new Dictionary.Category()
const ctor = Dictionary.Category
console.log(test instanceof Dictionary.Category) // false
console.log(Dictionary.Category.is(test)) // false
console.log(test instanceof ctor) // false
console.log(test.__proto__.constructor === ctor) // false
console.log(test.constructor === ctor) // false
console.log(test.constructor, ctor) // both function Category()
console.log(new Dictionary() instanceof Dictionary) // true (sanity check)
До сих пор я тестировал constructor.name
, но это ограничено. Как я могу решить эту проблему?
Благодаря ответу ниже, указывающему на проблему, вот рабочее решение:
class Dictionary {
static get Category () {
Dictionary.__Category = Dictionary.__Category || class Category {
constructor () {}
}
return Dictionary.__Category
}
}