Pregunta ¿Cómo obtener los métodos de un objeto?


¿Hay algún método o propiedad para obtener todos los métodos de un objeto? Por ejemplo:

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

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

ACTUALIZACIÓN: ¿Hay algún método así en Jquery?

Gracias.


73
2018-04-30 15:14


origen


Respuestas:


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

57
2018-04-30 15:19



Recuerde que técnicamente los objetos JavaScript no tienen métodos. Tienen propiedades, algunas de las cuales pueden ser objetos funcionales. Eso significa que puede enumerar los métodos en un objeto del mismo modo que puede enumerar las propiedades. Esto (o algo parecido a esto) debería funcionar:

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

Hay complicaciones en esto porque algunas propiedades de los objetos no son enumerables, por lo que no podrás encontrar cada función en el objeto.


45
2018-04-30 15:19



Puedes usar console.dir(object) para escribir las propiedades de los objetos a la consola.


25
2017-11-07 08:08



En los navegadores modernos puedes usar Object.getOwnPropertyNames para obtener todas las propiedades (enumerables y no enumerables) en un objeto. Por ejemplo:

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 );

Tenga en cuenta que esto solo recupera propiedades propias, por lo que no devolverá las propiedades que se encuentran en otras partes de la cadena del prototipo. Sin embargo, esa no parece ser su solicitud, así que supongo que este enfoque es suficiente.

Si solo quieres ver enumerable propiedades, puede usar en su lugar Object.keys. Esto devolvería la misma colección, menos el no enumerable constructor propiedad.


10
2018-05-10 06:03



Los métodos se pueden inspeccionar en la cadena de prototipos del objeto utilizando las herramientas de desarrollador del navegador (F12):

  console.log(yourJSObject);

o más directamente

  console.dir(yourJSObject.__proto__);

5
2017-07-05 12:41



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"]

3
2017-07-07 19:41



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

Estoy en un teléfono sin punto y coma :), pero esa es la idea general.


2
2018-04-30 15:19