263 votes

Obtenir le nom d'un objet ou d'une classe

Existe-t-il une solution pour obtenir le nom de la fonction d'un objet ?

function alertClassOrObject (o) {
   window.alert(o.objectName); //"myObj" OR "myClass" as a String
}

function myClass () {
   this.foo = function () {
       alertClassOrObject(this);
   }
}

var myObj = new myClass();
myObj.foo();

for (var k in this) {...} - il n'y a aucune information sur le className ou ObjectName . Est-il possible d'en obtenir un ?

0 votes

Vous pourriez vouloir voir ça : stackoverflow.com/questions/789675/

3voto

Scott Points 5971

J'étais confronté à une difficulté similaire et aucune des solutions présentées ici n'était optimale pour ce sur quoi je travaillais. J'avais une série de fonctions permettant d'afficher du contenu dans une modale et j'essayais de la refactoriser sous une seule définition d'objet en faisant des fonctions des méthodes de la classe. Le problème est apparu lorsque j'ai découvert que l'une des méthodes créait des boutons de navigation à l'intérieur de la modale elle-même, qui utilisaient un onClick vers l'une des fonctions - maintenant un objet de la classe. J'ai envisagé (et j'envisage encore) d'autres méthodes pour gérer ces boutons de navigation, mais j'ai pu trouver le nom de la variable pour la classe elle-même en balayant les variables définies dans la fenêtre parent. J'ai recherché tout ce qui correspondait à "instanceof" de ma classe et, au cas où il y en aurait plus d'une, j'ai comparé une propriété spécifique susceptible d'être unique pour chaque instance :

var myClass = function(varName)
{
    this.instanceName = ((varName != null) && (typeof(varName) == 'string') && (varName != '')) ? varName : null;

    /**
     * caching autosweep of window to try to find this instance's variable name
     **/
    this.getInstanceName = function() {
        if(this.instanceName == null)
        {
            for(z in window) {
                if((window[z] instanceof myClass) && (window[z].uniqueProperty === this.uniqueProperty)) {
                    this.instanceName = z;
                    break;
                }
            }
        }
        return this.instanceName;
    }
}

1voto

Vladimir Bushma Points 21

Tout ce dont nous avons besoin :

  1. Envelopper une constante dans une fonction (où le nom de la fonction est égal au nom de l'objet que l'on veut obtenir)
  2. Utiliser les fonctions de la flèche à l'intérieur de l'objet

    console.clear(); function App(){ // name of my constant is App return { a: { b: { c: ()=>{ // very important here, use arrow function console.log(this.constructor.name) } } } } } const obj = new App(); // usage

    obj.a.b.c(); // App

    // usage with react props etc, // For instance, we want to pass this callback to some component

    const myComponent = {}; myComponent.customProps = obj.a.b.c; myComponent.customProps(); // App

1voto

Shady Smaoui Points 69

Le moyen le plus efficace d'obtenir le nom de votre classe pendant l'exécution.

let className = this.constructor.name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X