Подтвердить что ты не робот

Как получить методы объекта?

Есть ли метод или свойство, чтобы получить все методы от объекта? Например:

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

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

UPDATE: Есть ли какой-нибудь метод в JQuery?

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

Помните, что технические объекты javascript не имеют методов. У них есть свойства, некоторые из которых могут быть объектами функций. Это означает, что вы можете перечислять методы в объекте так же, как вы можете перечислять свойства. Это (или что-то близкое к этому) должно работать:

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

Есть осложнения, потому что некоторые свойства объектов не перечислимы, поэтому вы не сможете найти каждую функцию объекта.

Ответ 3

Вы можете использовать console.dir(object) для записи свойств объектов на консоль.

Ответ 4

В современных браузерах вы можете использовать Object.getOwnPropertyNames, чтобы получить все объекты (как перечисляемые, так и неперечислимые) на объекте. Например:

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

Обратите внимание, что это только возвращает собственные свойства, поэтому он не будет возвращать свойства, найденные в другом месте в цепочке прототипов. Это, однако, не является вашим запросом, поэтому я предполагаю, что этот подход является достаточным.

Если вам нужно только просмотреть перечислимые свойства, вместо этого вы можете использовать Object.keys. Это приведет к возврату той же коллекции, за вычетом неперечислимого свойства constructor.

Ответ 5

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

Ответ 6

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

Я нахожусь на телефоне без полуколонок:), но это общая идея.

Ответ 7

var methods = [];
for (var key in foo.prototype) {
    if (typeof foo.prototype[key] === "function") {
         methods.push(key);
    }
}

Вы можете просто перебрать прототип конструктора и извлечь все методы.

Ответ 8

лучший способ:

let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)

используйте 'let' только в es6, вместо этого используйте 'var'

Ответ 9

Эти методы могут быть проверены в цепочке прототипов объекта с помощью инструментов разработчика браузера (F12):

  console.log(yourJSObject);

или более непосредственно

  console.dir(yourJSObject.__proto__);

Ответ 10

В Chrome есть keys(foo.prototype). Возвращает ["a", "b"].

Смотрите: https://developer.chrome.com/devtools/docs/commandline-api#keysobject введите описание изображения здесь

Далее отредактируйте: если вам нужно скопировать его быстро (для больших объектов), сделайте copy(keys(foo.prototype)), и вы получите его в буфере обмена.

Ответ 11

Получить имена методов:

var getMethodNames = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    }));
};

Или, Получить методы:

var getMethods     = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    })).map(function (key) {
        return obj[key];
    });
};