Редактировать: Я немного неправильно прочитал вопрос, вы хотите извлечь имена только свойств, которые являются функциональными объектами:
function methods(obj) {
var result = [];
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && typeof obj[prop] == 'function') {
result.push(prop);
}
}
return result;
}
var obj = {
foo: function() { },
bar: function() { },
};
methods(obj); // ["foo", "bar"]
Я использую метод hasOwnProperty
, чтобы убедиться, что перечисленные свойства фактически существуют в объекте физически.
Обратите внимание, что у этого подхода и всех других ответов есть небольшая проблема IE.
Ошибка в JScript DontEnum , пользовательские свойства, которые скрывают неперечислимые свойства (DontEnum
) выше в цепочке прототипов, не перечисляются с помощью оператора for-in, например:
var foo = {
constructor : function() { return 0; },
toString : function() { return "1"; },
valueOf : function() { return 2; }
toLocaleString : function() { return "3"; }
};
for (var propName in foo ) { alert(propName); }
Объект foo
явно определил четыре собственных свойства, но эти свойства существуют в Object.prototype
, помеченном как DontEnum
, если вы попытаетесь перечислить свойства этого объекта с помощью оператора for-in
в IE, он выиграет не найти.
Эта ошибка присутствует во всех версиях IE и недавно была исправлена в IE9 Platform Preview.