Necesito trabajar dentro de un espacio de nombres, digamos que hago esto

var my_namespace = {}

my_namespace.my_class = function() {}

var instance = new my_namespace.my_class();

Entonces el problema actual que estoy enfrentando es que instance.constructor.name devuelve "" (una cadena vacía).

Quiero verificar el tipo de instancia comparándolo con una variedad de posibilidades como 'String' o 'Array' o 'my_namespace.my_class'

Teóricamente podría solucionarlo usando instanceof y eval, pero estoy buscando una forma menos volátil.

0
user81993 23 mar. 2017 a las 18:37

2 respuestas

La mejor respuesta

¿Has considerado no usar una función anónima? Algo como:

var my_namespace = {};
my_namespace.my_class = function MyClass() {};
var instance = new my_namespace.my_class();

console.log(instance.constructor.name);
3
Aioros 23 mar. 2017 a las 16:09

Simplemente no lo hagas anónima:

var my_namespace = {
    my_class: function() {}
};
var instance = new my_namespace.my_class();
console.log(instance.constructor.name) // "my_class" - since ES6 at least

Pero tenga en cuenta que confiar en los nombres de las funciones es una práctica despreciada, puede fallar de muchas maneras. Si realmente necesita etiquetas, úselas explícitamente.

2
Bergi 23 mar. 2017 a las 16:13