Есть ли способ найти все элементы по типу данных

Если у вас есть веб-страница и на ней много объектов, есть ли способ выбрать все объекты определенного типа?

Например, если вы определяете класс A, а затем создаете 3 экземпляра A, есть ли способ найти все экземпляры класса A?

class A{

}

var a = new A()
var b = new A()
var c = new A()

Есть ли способ найти объекты a, b, c?

Нет, нет (или, может быть, есть, но это не рекомендуется).

Bergi 12.04.2018 23:34

Почему бы просто не сохранить их в списке? Какой у вас актуальная проблема?

Bergi 12.04.2018 23:35

Я пытаюсь получить структуры данных на странице, которую я не писал.

SamFisher83 12.04.2018 23:36

Если вы добавляете каждый созданный вами объект в какую-либо коллекцию при ее создании, а затем ищите в этой коллекции instanceof Classnamestackoverflow.com/questions/1249531/…

mc01 12.04.2018 23:37

нет, вам нужно сохранить экземпляры в Array () или Set (), чтобы сохранить все ссылки

Yukulélé 12.04.2018 23:38

@ SamFisher83 И какой инструмент вы используете для этого? Отладчик?

Bergi 12.04.2018 23:51

@ SamFisher83 Теперь у вас есть контроль над кодом (т.е. поддерживаете ли вы страницу, которую не создавали, или вы просто пытаетесь реконструировать полностью чужую страницу)?

Bergi 12.04.2018 23:56
Поведение ключевого слова "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) для оценки ваших знаний,...
1
7
58
2

Ответы 2

Если вы можете перебирать набор имеющихся у вас объектов, вы можете использовать instanceofMDN. Однако без сбора объектов по мере их создания маловероятно, что вы сможете собрать набор, просто взглянув на глобальное пространство имен. В основном потому, что пространство имен занято, а также тот факт, что любой из этих объектов, которые были созданы внутри отдельных областей, не будет доступен через этот канал.

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

Вы можете перебрать все объекты в window и проверить их имя конструктора:

class A {

}

var a = new A();
let b = new A();
const c = new A();
var d = new A();

for(var key in window){
  if (window[key] && window[key].constructor && window[key].constructor.name == "A"){
    console.info(key);
  }   
}

/*
    Output:
 a
 d
*/

Хотя при этом будут найдены только элементы определяется с помощью var в глобальной области видимости.

Лучшим вариантом (если бы вы были создателем страницы) было бы добавить все элементы, которые вы хотите отслеживать, в список или объект по мере их создания.

Обратите внимание, что это не ограничивается только глобальной областью, но и глобальной областью, и var - let или const не будут добавлены к глобальному объекту.

ASDFGerte 12.04.2018 23:46

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