Desde es6 no es compatible con clases anidadas, yo he tomado a la adición de una clase anidada a un captador estática de los padres. Por ejemplo:
class Dictionary {
static get Category () {
return class Category {
static is (inst) {
return inst instanceof Category
}
constructor () {}
}
}
}
Sin embargo, estoy teniendo un problema con instanceof
. Quiero para asegurarse de que una determinada variable es una instancia correcta.
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)
Hasta ahora, he estado probando el constructor.name
pero esto es limitado. ¿Como puedó resolver esté problema?
Gracias a la respuesta a continuación señalando el problema, aquí es una solución de trabajo:
class Dictionary {
static get Category () {
Dictionary.__Category = Dictionary.__Category || class Category {
constructor () {}
}
return Dictionary.__Category
}
}
Esto está fallando debido a que cada acceso de la propiedad getter crea una clase completamente nueva, que sólo pasa a tener todo lo mismo que el que tiene la última vez que accedió al comprador.
Si desea una propiedad anidada, utilizar una propiedad, por ejemplo,
class Dictionary {
}
Dictionary.Category = class Category {
static is (inst) {
return inst instanceof Category
}
constructor () {}
};