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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
70
0
66 928
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

От здесь:

Пример 1. В этом примере записываются все свойства объекта "навигатор" плюс их значения:

for (var myprop in navigator){
 document.write(myprop+": "+navigator[myprop]+"<br>")
}

Просто замените навигатор на любой интересующий вас объект, и все будет в порядке.

Как упомянул Энтони в разделе комментариев - это возвращает все атрибуты, а не только методы, как заданный вопрос.

Ой! Это научит меня пытаться отвечать на вопрос на незнакомом мне языке. Тем не менее, я считаю, что код полезен - просто не то, что требовалось.

Это возвращает все атрибуты, а не только методы, как заданный вопрос. В IE он возвращает только некоторые свойства и ни один из методов.

AnthonyWJones 30.09.2008 14:50

Взгляните на этот код: -

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 есть некоторые свойства / методы, которые выдают ошибку при доступе.

scunliffe 30.09.2008 16:26

Да, я думаю, что они есть и в Firefox.

troelskn 30.09.2008 18:03

Обратите внимание, что он не работает с некоторыми встроенными объектами, такими как Date: var a = new Date(); console.info(typeof a, getMethods(a)); Returns: object [].

FGM 24.05.2016 18:02

Вот образец 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.

thecodesmith_ 27.06.2017 00:31

Если вы просто хотите посмотреть, что находится внутри объекта, вы можете распечатать все ключи объекта. Некоторые из них могут быть переменными, некоторые - методами.

Метод не очень точный, но очень быстрый:

console.info(Object.keys(obj));

Почему Object.keys(new Date()); дает мне пустой массив?

Old Geezer 02.05.2019 17:58

Другие вопросы по теме