82 Stimmen

Gibt es eine Möglichkeit, alle Methoden eines Objekts zu drucken?

Gibt es eine Möglichkeit, alle Methoden eines Objekts in JavaScript zu drucken?

103voto

troelskn Punkte 110542

Ja, sicher:

function getMethods(obj) {
  var result = [];
  for (var id in obj) {
    try {
      if (typeof(obj[id]) == "function") {
        result.push(id + ": " + obj[id].toString());
      }
    } catch (err) {
      result.push(id + ": inaccessible");
    }
  }
  return result;
}

Verwenden Sie es:

alert(getMethods(document).join("\n"));

25voto

mrded Punkte 3874

Wenn Sie nur nachsehen wollen, was sich in einem Objekt befindet, können Sie alle Schlüssel des Objekts ausgeben. Einige von ihnen können Variablen sein, andere - Methoden.

Die Methode ist nicht sehr genau, aber sie ist sehr schnell:

console.log(Object.keys(obj));

6voto

Gianluca Esposito Punkte 500

Hier ist ein ES6 Probe.

// Get the Object's methods names:
function getMethodsNames(obj = this) {
    return Object.keys(obj)
        .filter((key) => typeof obj[key] === 'function');
}

// Get the Object's methods (functions):
function getMethods(obj = this) {
    return Object.keys(obj)
        .filter((key) => typeof obj[key] === 'function')
        .map((key) => obj[key]);
}

obj = this ist ein ES6-Standardparameter. Sie können ein Objekt übergeben, oder es wird standardmäßig ein this .

Object.keys gibt ein Array der Object eigene aufzählbare Eigenschaften. Über die window Objekt wird es zurückgeben [..., 'localStorage', ...'location'] .

(param) => ... ist eine ES6-Pfeilfunktion, sie ist eine Kurzform für

function(param) {
    return ...
}

mit einer impliziten Rückgabe.

Array.filter erzeugt ein neues Array mit allen Elementen, die den Test bestehen ( typeof obj[key] === 'function' ).

Array.map erstellt ein neues Array mit den Ergebnissen des Aufrufs einer angegebenen Funktion für jedes Element in diesem Array (Rückgabe obj[key] ).

3voto

AnthonyWJones Punkte 182582

Werfen Sie einen Blick auf diesen Code:-

function writeLn(s)
{
    //your code to write a line to stdout
    WScript.Echo(s)
}

function Base() {}
Base.prototype.methodA = function() {}
Base.prototype.attribA = "hello"

var derived = new Base()
derived.methodB = function() {}
derived.attribB = "world";

function getMethods(obj)
{
    var retVal = {}

    for (var candidate in obj)
    {
        if (typeof(obj[candidate]) == "function")
            retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)}
    }
    return retVal
}

var result = getMethods(derived)
for (var name in result)
{
    writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited")
}

Die Funktion getMethod gibt die Menge der Methoden zurück und gibt an, ob es sich um eine Methode handelt, die von einem Prototyp geerbt wurde.

Beachten Sie, dass, wenn Sie beabsichtigen, diese auf Objekte, die aus dem Kontext wie Browser / DOM-Objekt geliefert werden, dann wird es nicht funktionieren IE verwenden.

1voto

WalkingRandomly Punkte 4327

Von aquí :

Beispiel 1: In diesem Beispiel werden alle Eigenschaften des Objekts "navigator" und ihre Werte ausgegeben:

for (var myprop in navigator){
 document.write(myprop+": "+navigator[myprop]+"<br>")
}

Ersetzen Sie einfach 'navigator' durch das Objekt, das Sie interessiert, und Sie sollten damit fertig sein.

Wie von Anthony im Kommentarbereich erwähnt, werden alle Attribute zurückgegeben, nicht nur die Methoden, nach denen die Frage gestellt wurde.

Huch! Das wird mich lehren, zu versuchen, eine Frage in einer Sprache zu beantworten, die ich nicht kenne. Dennoch denke ich, dass der Code nützlich ist - nur nicht das, was erforderlich war.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X