Есть ли способ распечатать все методы объекта в JavaScript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


От здесь:
Пример 1. В этом примере записываются все свойства объекта "навигатор" плюс их значения:
for (var myprop in navigator){
document.write(myprop+": "+navigator[myprop]+"<br>")
}
Просто замените навигатор на любой интересующий вас объект, и все будет в порядке.
Как упомянул Энтони в разделе комментариев - это возвращает все атрибуты, а не только методы, как заданный вопрос.
Ой! Это научит меня пытаться отвечать на вопрос на незнакомом мне языке. Тем не менее, я считаю, что код полезен - просто не то, что требовалось.
Взгляните на этот код: -
function writeLn(s)
{
//your code to write a line to stdout
WScript.Echo(s)
}
function Base() {}
Base.prototype.methodA = function() {}
Base.prototype.attribA = "hello"
var derived = new Base()
derived.methodB = function() {}
derived.attribB = "world";
function getMethods(obj)
{
var retVal = {}
for (var candidate in obj)
{
if (typeof(obj[candidate]) == "function")
retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)}
}
return retVal
}
var result = getMethods(derived)
for (var name in result)
{
writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited")
}
Функция getMethod возвращает набор методов, а также указывает, унаследован ли метод от прототипа.
Обратите внимание, что если вы собираетесь использовать это для объектов, которые предоставляются из контекста, таких как браузер / объект DOM, то это не будет работать с IE.
Поскольку методы в JavaScript - это просто свойства, являющиеся функциями, цикл for..in перечислит их с исключением - он не будет перечислять встроенные методы. Насколько я знаю, нет возможности перечислить встроенные методы. И вы не можете объявить свои собственные методы или свойства для объекта, который таким образом не перечислим.
Конечно:
function getMethods(obj) {
var result = [];
for (var id in obj) {
try {
if (typeof(obj[id]) == "function") {
result.push(id + ": " + obj[id].toString());
}
} catch (err) {
result.push(id + ": inaccessible");
}
}
return result;
}
Используй это:
alert(getMethods(document).join("\n"));
попытка / улов - хороший подход. В IE есть некоторые свойства / методы, которые выдают ошибку при доступе.
Да, я думаю, что они есть и в Firefox.
Обратите внимание, что он не работает с некоторыми встроенными объектами, такими как Date: var a = new Date(); console.info(typeof a, getMethods(a)); Returns: object [].
Вот образец ES6.
// Get the Object's methods names:
function getMethodsNames(obj = this) {
return Object.keys(obj)
.filter((key) => typeof obj[key] === 'function');
}
// Get the Object's methods (functions):
function getMethods(obj = this) {
return Object.keys(obj)
.filter((key) => typeof obj[key] === 'function')
.map((key) => obj[key]);
}
obj = this является параметром ES6 по умолчанию, вы можете передать объект или по умолчанию будет this.
Object.keys возвращает массив перечисляемых свойств Object.
По объекту window он вернет [..., 'localStorage', ...'location'].
(param) => ... - это стрелочная функция ES6, сокращение от
function(param) {
return ...
}
с неявным возвратом.
Array.filter создает новый массив со всеми элементами, прошедшими проверку (typeof obj[key] === 'function').
Array.map создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве (возврат obj[key]).
Это полезно! Одно исправление: внутри функций следует использовать obj вместо this.
Если вы просто хотите посмотреть, что находится внутри объекта, вы можете распечатать все ключи объекта. Некоторые из них могут быть переменными, некоторые - методами.
Метод не очень точный, но очень быстрый:
console.info(Object.keys(obj));
Почему Object.keys(new Date()); дает мне пустой массив?
Это возвращает все атрибуты, а не только методы, как заданный вопрос. В IE он возвращает только некоторые свойства и ни один из методов.