Javascript получить все методы объекта

Javascript получить все методы объекта

При динамическом определении в объекте новых свойств и методов перед их использованием бывает важно проверить, а есть ли уже такие методы и свойства. Для этого в javascript может использоваться оператор in . Он имеет следующий синтаксис:

в кавычках идет название свойства или метода, а после in — название объекта. Если свойство или метод с подобным именем имеется, то оператор возвращает true . Если нет — то возвращается false .

Например, узнаем, есть ли в объекте ряд свойств:

const user = <>; user.name = "Tom"; user.age = 26; user.print = function()< console.log(this.name); console.log(this.age); >; const hasNameProp = "name" in user; console.log(hasNameProp); // true - свойство name есть в user const hasWeightProp = "weight" in user; console.log(hasWeightProp); // false - в user нет свойства или метода под названием weight

С помощью выражения «name» in user проверяем, есть ли в объекте user свойство «name» и результат проверки передаем в константу hasNameProp. Далее анологичным образом проверяем наличие свойства wheight .

Подобным образом можно проверить и наличие методов:

const hasPrintMethod = "print" in user; console.log(hasPrintMethod); // true - в user есть метод print

Альтернативный способ заключается на значение undefined . Если свойство или метод равен undefined, то эти свойство или метод не определены:

const hasNameProp = user.name!==undefined; console.log(hasNameProp); // true const hasWeightProp = user.weight!==undefined; console.log(hasWeightProp); // false

И так как объекты представляют тип Object, а значит, имеет все его методы и свойства, то объекты также могут использовать метод hasOwnProperty() , который определен в типе Object:

const hasNameProp = user.hasOwnProperty("name"); console.log(hasNameProp); // true const hasPrintMethod = user.hasOwnProperty("print"); console.log(hasPrintMethod); // true const hasWeightProp = user.hasOwnProperty("weight"); console.log(hasWeightProp); // false

Перебор свойств и методов

С помощью цикла for мы можем перебрать объект как обычный массив и получить все его свойства и методы и их значения:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; for(const prop in tom)

И при запуске консоль браузера отобразит следующий вывод:

name : Tom age : 26 print : print() < console.log(`Name: $Age: $`); >

Функции Object.entries, Object.keys, Object,values

С помощью дополнительных функций Object.entries , Object.keys и Object,values можно получить все свойства (в том числе методы) объекта и их значения.

Object.entries()

Функция Object.entries() в качестве параметра принимает объект и возвращает массив пар «название_свойства — значение», где каждая пара свойство-значение представляет массив. Например:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; for(const prop of Object.entries(tom))

Object.keys()

Функция Object.keys() позволяет получить массив названий всех свойств объекта. Например, возьмем выше опредеенный объект tom :

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; console.log(Object.keys(tom)); // ["name", "age", "print"]

Соответственно можно перебрать этот набор и получить значения свойств:

for(const prop of Object.keys(tom)) < const value = tom[prop]; // получаем по названию значение свойства console.log(prop,value); >
name Tom age 26 print ƒ print() < console.log(`Name: $Age: $`); >

Object.values()

Функция Object.values() возвращает массив, который содержит все значения свойств объекта:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; console.log(Object.values(tom)); // ["Tom", 26, print()]

Источник

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

попробуй / поймай это хороший подход. В IE есть некоторые свойства / методы, которые будут давать ошибки при доступе.

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

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

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

Здесь сообщение JS reflection. Он должен делать то, что вы ищете.

// Get the Object methods names: function getMethodsNames(obj = this) < return Object.keys(obj) .filter((key) =>typeof objJavascript получить все методы объекта === 'function'); > // Get the Object methods (functions): function getMethods(obj = this) < return Object.keys(obj) .filter((key) =>typeof objJavascript получить все методы объекта === 'function') .map((key) => objJavascript получить все методы объекта); > 

obj = this параметр ES6 по умолчанию, вы можете передать объект или он будет по умолчанию для this .

Object.keys возвращает массив из Object собственных перечислимых свойств. Над window Object он вернет [. ‘localStorage’. ‘location’] .

(param) =>. является функцией стрелки ES6, это сокращение для

Array.filter создает новый массив со всеми элементами, которые проходят тест ( typeof objJavascript получить все методы объекта === ‘function’ ).

Array.map создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве (возвращает objJavascript получить все методы объекта ).

Возьмите gander в этом коде: —

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] = > return retVal > var result = getMethods(derived) for (var name in result)

Функция getMethod возвращает набор методов вместе с тем, является ли метод тем, который был унаследован от прототипа.

Обратите внимание, что если вы намереваетесь использовать это на объектах, которые предоставляются из контекста, таких как объект browser/DOM, то он не будет работать IE.

Пример 1: В этом примере выписываются все свойства объекта «навигатор», а также их значения:

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

Просто замените «навигатор» на любой объект, который вас интересует, и вам должно быть хорошо идти.

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

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

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

Так как методы в JavaScript — это просто свойства, которые являются функциями, цикл for..in перечисляет их с исключением — он не будет перечислять встроенные методы. Насколько я знаю, нет способа перечислить встроенные методы. И вы не можете объявлять свои собственные методы или свойства для объекта, которые не перечислены таким образом.

Ещё вопросы

  • 0 показывая загрузочный образ php
  • 1 Как анализировать различные XML-файлы с помощью SAX на Android?
  • 0 Попытка заставить curl работать в c ++ linux и GDB
  • 0 При первом нажатии CSS3 работает, но при втором не работает, почему?
  • 0 Проверка на наличие дубликатов с помощью mysqli_num_row Error
  • 1 Время Tweepy Status.created_at не соответствует фактическому времени временной шкалы.
  • 0 Как отобразить значения как Y или N в SQL?
  • 1 Преобразование байтового массива для создания другого звука в приложении Windows 8
  • 0 Таблица сортировки AngularJs по уже вставленным данным
  • 1 MVC Linq OrderBy не сохраняется в Razor View
  • 1 Обратная совместимая структура с новыми функциями
  • 1 Что не так с этим VenuesExplore?
  • 1 Как правильно реализовать обработку кадров Camera2 в реальном времени с помощью RxJava?
  • 0 рекурсивные результаты итератора каталога: отфильтровывать определенные символы из результирующих путей
  • 0 Если в iframe показать / скрыть div
  • 0 Несколько условий в операторе If или разделении
  • 0 пытаясь заставить PHP разместить строку в файл
  • 1 Как реализовать диалоговую опцию выбора в архитектуре Android MVVM
  • 1 Вставьте оператор в базу данных SQL Server
  • 0 Оценка постфиксного выражения. pop () возвращает неверные значения для вычисления функции
  • 1 C # заблокирован функционирует как механизм блокировки?
  • 1 Ошибка OpenCV: bitwise_and выдает ошибку, что маска и изображение не имеют одинаковый размер
  • 0 Ошибка: ожидаемый идентификатор
  • 1 Вставить несколько строк с циклом for в строку, созданную с помощью readlines ()
  • 0 Как хранить несколько рабочих писем, личных и т. Д. Для одного контакта в MySQL
  • 1 Любые предложения о том, как я могу создать ссылку электронной почты в кнопке Java
  • 1 256-битное шифрование Blowfish в Java
  • 1 Как сценарии npm отдают приоритет локальной зависимости над глобальными?
  • 0 Моя Галерея Содержания Javascript — Ошибка Где-то здесь
  • 0 показ дополнительной строки при чтении файла в c ++ с использованием fstream
  • 1 Сохранение JPanel как изображения (объекта) и отрисовка его на JPanel
  • 1 java.lang.ArrayIndexOutOfBoundsException: 0 В самой простой программе
  • 0 угловая ошибка выпадающего загрузчика: d.init не является функцией
  • 0 Ошибки включения Android NDK с помощью cURL
  • 1 Кнопки Python Tkinter numpad и несколько входов
  • 0 Отправить пользователя по определенному URL в зависимости от ввода его текстового поля
  • 0 Как посчитать, сколько раз был выполнен цикл? C ++
  • 1 Как отправить сообщение NDEF с телефона Android на Pi
  • 1 Как: создать GridSplitter, который настраивает размер DockPanel (C #, WPF)
  • 0 Несоответствие строк при вызове ajax в WebApi
  • 1 Возврат ближайшего значения в таблицу поиска и внесение в список диктовок
  • 0 Записать переменные JavaScript в файл JSON
  • 0 jQuery .prepend результаты JSON для нескольких div
  • 0 если утверждение продолжает отступать к остальной части
  • 1 Java конвертировать текстовый файл UTF-8 в Cp1250
  • 0 PHP — получить строки из базы данных, где слово отсутствует в определенном тексте
  • 0 Выбрать количество из нескольких таблиц
  • 0 Пул объектов — создание объектов позже не работает
  • 0 OpenGL 3.2+ Рисование кубов вокруг существующих вершин
  • 1 Каким будет путь к пакету служб SSIS?

Источник

Читайте также:  Типы option в html
Оцените статью