Existe-t-il une méthode ou une propriété pour 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?
Merci.
function getMethods(obj)
{
var res = [];
for(var m in obj) {
if(typeof obj[m] == "function") {
res.Push(m)
}
}
return res;
}
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 la fonction tous sur cet objet.
Vous pouvez utiliser console.dir(object)
pour écrire les propriétés de cet objet dans la console.
Dans les navigateurs modernes, vous pouvez utiliser Object.getOwnPropertyNames
pour obtenir toutes les propriétés (énumérables et non énumérables) 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 );
Notez que ceci ne récupère que propres propriétés , ainsi il ne retournera pas les propriétés trouvées ailleurs sur la chaîne de prototypes. Cela, cependant, ne semble pas être votre demande et je vais donc supposer que cette approche est suffisante.
Si vous souhaitez uniquement voir des propriétés énumérables , vous pouvez utiliser plutôt Object.keys
. Cela renverrait la même collection, moins la propriété non énumérable constructor
.
Les méthodes peuvent être inspectées dans la chaîne de prototypes de l'objet à l'aide des outils de développement du navigateur (F12):
console.log(yourJSObject);
ou plus directement
console.dir(yourJSObject.__proto__);
En ES6:
let myObj = {myFn : function() {}, tamato: true};
let allKeys = Object.keys(myObj);
let fnKeys = allKeys.filter(key => typeof myObj[key] == 'function');
console.log(fnKeys);
// output: ["myFn"]
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.
le meilleur moyen est:
let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)
utilisez 'let' uniquement dans es6, utilisez 'var' à la place
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.
pour moi, le seul moyen fiable d'obtenir les méthodes de la dernière classe d'extension était de procéder comme suit:
function getMethodsOf(obj){
const methods = {}
Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
methods[methodName] = obj[methodName]
})
return methods
}
Obtenir les noms de méthode:
var getMethodNames = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
}));
};
Ou, obtenez les méthodes:
var getMethods = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
})).map(function (key) {
return obj[key];
});
};
Dans Chrome est keys(foo.prototype)
. Renvoie ["a", "b"]
.
Voir: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Édition ultérieure: si vous avez besoin de le copier rapidement (pour les objets plus gros), faites copy(keys(foo.prototype))
et vous l’aurez dans le presse-papier.