usando instanceof con clase de regresar de una función

Twifty:

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.namepero 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
  }
}
loganfsmyth:

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 () {}
};

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=302934&siteId=1
Recomendado
Clasificación