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?