2017-03-23 2 views
0

Ich brauche in einem Namensraum zu arbeiten, sage ichErste der Name einer von einer anonymen Funktion konstruiert Klasse

var my_namespace = {} 

my_namespace.my_class = function() {} 

var instance = new my_namespace.my_class(); 

Dann machen Sie das aktuelle Problem, das ich mit Blick auf bin ist, dass instance.constructor.name returns " "(eine leere Zeichenfolge).

Ich mag die Art von Instanz überprüfen, indem es gegen eine Reihe von Möglichkeiten, wie ‚String‘ oder ‚Array‘ oder ‚my_namespace.my_class‘

Theoretisch Vergleich konnte ich es umgehen, indem instanceof und eval aber ich suche einen weniger volatilen Weg.

+0

Setzen Sie eine Namenseigenschaft in Ihrem Konstruktor? – Orangesandlemons

+0

Nein. Sie können instance.constructor verwenden, um eine direkte Referenz zu erhalten, aber es handelt sich um eine anonyme Funktion, sodass der Name nicht abgerufen werden kann. – callback

+0

Ich dachte eher an etwas wie 'this.className =" Name "' im Konstruktor, also gibt instance.className den Typ – Orangesandlemons

Antwort

3

Haben Sie in Betracht gezogen, keine anonyme Funktion zu verwenden? Etwas wie:

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

 
console.log(instance.constructor.name);

2

einfach nicht, es anonym machen:

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

aber feststellen, dass auf Funktionsnamen unter Berufung eine verachtete Praxis ist, kann es auf so viele Arten scheitern . Wenn Sie Tags wirklich benötigen, verwenden Sie sie explizit.

+1

"Wenn Sie wirklich Tags benötigen, verwenden Sie diese explizit." Ja tu das! –

Verwandte Themen