Gibt es eine Methode oder Eigenschaft, um alle Methoden von einem Objekt abzurufen? Beispielsweise:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
UPDATE: Gibt es in Jquery eine solche Methode?
Vielen Dank.
function getMethods(obj)
{
var res = [];
for(var m in obj) {
if(typeof obj[m] == "function") {
res.Push(m)
}
}
return res;
}
Denken Sie daran, dass technisch gesehen Javascript-Objekte keine Methoden haben. Sie haben Eigenschaften, von denen einige Funktionsobjekte sein können. Das bedeutet, dass Sie die Methoden in einem Objekt genau wie die Eigenschaften auflisten können. Dies (oder etwas Ähnliches) sollte funktionieren:
var bar
for (bar in foo)
{
console.log("Foo has property " + bar);
}
Dies kann zu Komplikationen führen, da einige Eigenschaften von Objekten nicht aufgezählt werden können und Sie nicht in der Lage sind, die Funktion every für das Objekt zu finden.
Sie können console.dir(object)
verwenden, um die Objekteigenschaften in die Konsole zu schreiben.
In modernen Browsern können Sie Object.getOwnPropertyNames
um alle Eigenschaften (sowohl enumerable als auch nonenumerable) eines Objekts abzurufen. Zum Beispiel:
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 );
Beachten Sie, dass hiermit nur die eigenen Eigenschaften abgerufen werden , sodass keine Eigenschaften zurückgegeben werden, die an anderer Stelle in der Prototypenkette gefunden wurden. Dies scheint jedoch nicht Ihre Anfrage zu sein, daher gehe ich davon aus, dass dieser Ansatz ausreicht.
Wenn Sie nur aufzählbare Eigenschaften sehen möchten, können Sie stattdessen Object.keys
. Dies würde dieselbe Auflistung abzüglich der nicht aufzählbaren Eigenschaft constructor
zurückgeben.
Die Methoden können in der Prototypenkette des Objekts mit den Entwicklertools des Browsers (F12) überprüft werden:
console.log(yourJSObject);
oder direkter
console.dir(yourJSObject.__proto__);
In 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)
}
}
Ich telefoniere ohne Semikolon :) aber das ist die allgemeine Idee.
der beste Weg ist:
let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)
benutze 'let' nur in es6, benutze stattdessen 'var'
var methods = [];
for (var key in foo.prototype) {
if (typeof foo.prototype[key] === "function") {
methods.Push(key);
}
}
Sie können einfach den Prototyp eines Konstruktors durchlaufen und alle Methoden extrahieren.
für mich war der einzig verlässliche Weg, die Methoden der abschließenden Erweiterungsklasse zu erhalten, wie folgt:
function getMethodsOf(obj){
const methods = {}
Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
methods[methodName] = obj[methodName]
})
return methods
}
Holen Sie sich die Methodennamen:
var getMethodNames = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
}));
};
Oder erhalten Sie die Methoden:
var getMethods = function (obj) {
return (Object.getOwnPropertyNames(obj).filter(function (key) {
return obj[key] && (typeof obj[key] === "function");
})).map(function (key) {
return obj[key];
});
};
In Chrome ist keys(foo.prototype)
. Gibt ["a", "b"]
Zurück.
Siehe: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Später bearbeiten: Wenn Sie es schnell kopieren müssen (für größere Objekte), führen Sie copy(keys(foo.prototype))
aus, und Sie haben es in der Zwischenablage.