93 votes

JavaScript - Obtenir les méthodes de l'objet

Existe-t-il une méthode ou une propriété permettant d'obtenir toutes les méthodes d'un objet? Par exemple:

 function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}

foo.get_methods(); // returns ['a', 'b'];
 

MISE À JOUR: Existe-t-il une méthode de ce type dans Jquery?

Je vous remercie.

74voto

Makram Saleh Points 4865
function getMethods(obj)
{
    var res = [];
    for(var m in obj) {
        if(typeof obj[m] == "function") {
            res.push(m)
        }
    }
    return res;
}

46voto

Larry Osterman Points 12713

Rappelez-vous que techniquement les objets javascript n'ont pas de méthodes. Ils ont des propriétés, dont certaines peuvent être des objets de fonction. Cela signifie que vous pouvez énumérer les méthodes d'un objet, tout comme vous pouvez énumérer les propriétés. Ceci (ou quelque chose de proche de cela) devrait fonctionner:

 var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}
 

Il y a des complications à cela, car certaines propriétés des objets ne sont pas énumérables, vous ne pourrez donc pas trouver toutes les fonctions de l'objet.

19voto

Jonathan Sampson Points 121800

Dans les navigateurs modernes vous pouvez utiliser Object.getOwnPropertyNames pour obtenir toutes les propriétés (les deux énumérable et non énumérable) sur un objet. Par exemple:

function Person ( age, name ) {
    this.age = age;
    this.name = name;
}

Person.prototype.greet = function () {
    return "My name is " + this.name;
};

Person.prototype.age = function () {
    this.age = this.age + 1;
};

// ["constructor", "greet", "age"]
Object.getOwnPropertyNames( Person.prototype );

Noter que ceci ne récupère propres propriétés, afin de ne pas renvoyer les propriétés trouvées ailleurs sur la chaîne de prototype. Qui, cependant, ne semble pas être votre demande et je vais donc assumer cette approche est suffisante.

Si vous voudrais seulement voir l' énumération des propriétés, vous pouvez à la place utiliser Object.keys. Ce serait de retour la même collection, moins le non-énumérable constructor de la propriété.

2voto

Matt Greer Points 29401
 var funcs = []
for(var name in myObject) {
    if(typeof myObject[name] === 'function') {
        funcs.push(name)
    }
}
 

Je suis au téléphone sans point-virgule :) mais c'est l'idée générale.

1voto

Raynos Points 82706
 var methods = [];
for (var key in foo.prototype) {
    if (typeof foo.prototype[key] === "function") {
         methods.push(key);
    }
}
 

Vous pouvez simplement parcourir le prototype d'un constructeur et extraire toutes les méthodes.

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