Есть ли способ или свойство получить все методы от объекта? Например:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
ОБНОВЛЕНИЕ: есть ли такой метод в JQuery?
Спасибо.
Ответы:
function getMethods(obj) { var res = []; for(var m in obj) { if(typeof obj[m] == "function") { res.push(m) } } return res; }
источник
for..in
Способ является стандартным подходом.TypeError: '[object Object]' is not a function (evaluating 'obj(m)')
m instanceof Function
?Помните, что технически объекты javascript не имеют методов. У них есть свойства, некоторые из которых могут быть функциональными объектами. Это означает, что вы можете перечислять методы в объекте точно так же, как вы можете перечислять свойства. Это (или что-то близкое к этому) должно работать:
var bar for (bar in foo) { console.log("Foo has property " + bar); }
Здесь есть сложности, потому что некоторые свойства объектов не перечисляются, поэтому вы не сможете найти все функции объекта.
источник
Вы можете использовать
console.dir(object)
для записи свойств этих объектов в консоль.источник
В современных браузерах вы можете использовать
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
свойства.источник
Эти методы можно проверить в цепочке прототипов объекта с помощью инструментов разработчика браузера (F12):
console.log(yourJSObject);
или более прямо
console.dir(yourJSObject.__proto__);
источник
В 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"]
источник
для меня единственный надежный способ получить методы последнего расширяющегося класса заключался в следующем:
function getMethodsOf(obj){ const methods = {} Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => { methods[methodName] = obj[methodName] }) return methods }
источник
var funcs = [] for(var name in myObject) { if(typeof myObject[name] === 'function') { funcs.push(name) } }
Я говорю по телефону без точек с запятой :) но это общая идея.
источник
var methods = []; for (var key in foo.prototype) { if (typeof foo.prototype[key] === "function") { methods.push(key); } }
Вы можете просто перебрать прототип конструктора и извлечь все методы.
источник
лучший способ:
let methods = Object.getOwnPropertyNames(yourobject); console.log(methods)
используйте let только в es6, вместо этого используйте var
источник
В Chrome есть
keys(foo.prototype)
. Возврат["a", "b"]
.См. Https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Последующее редактирование: если вам нужно быстро скопировать его (для более крупных объектов), сделайте это,
copy(keys(foo.prototype))
и он будет в буфере обмена.источник
Получите имена методов:
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]; }); };
источник