Ответ 1
function getMethods(obj)
{
var res = [];
for(var m in obj) {
if(typeof obj[m] == "function") {
res.push(m)
}
}
return res;
}
Есть ли метод или свойство, чтобы получить все методы от объекта? Например:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
UPDATE: Есть ли какой-нибудь метод в JQuery?
Спасибо.
function getMethods(obj)
{
var res = [];
for(var m in obj) {
if(typeof obj[m] == "function") {
res.push(m)
}
}
return res;
}
Помните, что технические объекты 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
.
В 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"]
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'
Эти методы могут быть проверены в цепочке прототипов объекта с помощью инструментов разработчика браузера (F12):
console.log(yourJSObject);
или более непосредственно
console.dir(yourJSObject.__proto__);
В 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];
});
};