webentwicklung-frage-antwort-db.com.de

Wie bekomme ich die Methoden eines Objekts?

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.

83
thom
function getMethods(obj)
{
    var res = [];
    for(var m in obj) {
        if(typeof obj[m] == "function") {
            res.Push(m)
        }
    }
    return res;
}
65
Makram Saleh

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.

46
Larry Osterman

Sie können console.dir(object) verwenden, um die Objekteigenschaften in die Konsole zu schreiben.

27
pstenstrm

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.

14
Sampson

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__);
6
Matoeil

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"]
3
Kevin Beal
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.

2
Matt Greer

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.

1
Raynos

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
}
1
Jo-Go

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];
    });
};
0
sidanmor

In Chrome ist keys(foo.prototype). Gibt ["a", "b"] Zurück.

Siehe: https://developer.chrome.com/devtools/docs/commandline-api#keysobjectenter image description here

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.

0
Șerban Ghiță