Создавать классы Javascript динамически

У меня есть вопрос, который не должен быть слишком сложным, но я целыми днями не могу найти ответа. Все решения, которые я нашел, мне не помогли, все они выдавали ошибки.

Я создал класс в Javascript и хочу создать новый экземпляр динамически, чтобы я мог создавать экземпляры нескольких классов в зависимости от параметра в функции. Кажется, это не работает, и мне интересно, почему.

settings.js и main.js загружаются через тег <script> в HTML-файл, причем сначала загружается settings.js.

main.js

let myClass = new settings(); // Works
let myClass2 = test('settings'); // Error: Uncaught TypeError: param is not a constructor

function test(param){
  return new param();
}

settings.js

class settings{

  constructor(){
    console.info("works");
  }
}

Спасибо за любую помощь!

param - это переменная, вы, вероятно, ищете что-то вроде этого: stackoverflow.com/questions/34655616/…

briosheje 23.03.2018 15:19

Вы не можете просто создать экземпляр строки, вы, вероятно, могли бы использовать строку для поиска класса, например, new window[param]()

Marie 23.03.2018 15:19

Что ж, ошибка очень емкая. Вы передаете «настройки» в качестве аргумента и ожидаете, что функция вернет его экземпляр. Но это не конструктор - это строка.

Andy 23.03.2018 15:19

Просто удалите одинарные кавычки. let myClass2 = test(settings);

takendarkk 23.03.2018 15:20

@csmckelvey: Это уничтожило бы всю цель динамического поиска.

H.B. 23.03.2018 15:21
stackoverflow.com/questions/359788/…
Matt Burland 23.03.2018 15:21

@ H.B. OP не хочет динамического поиска.

melpomene 23.03.2018 15:21

@ H.B. что вы имеете в виду под «динамическим поиском», вы не можете передать строку и ожидать, что она волшебным образом вернет класс с тем же именем.

Ryan Schaefer 23.03.2018 15:22

csmckelvey, удаление кавычек сработало. Я также рассмотрю другие ответы, всем спасибо!

Peter Iedema 23.03.2018 15:22

Ваша проблема может быть сведена к: console.info(42); // works и var x = 42; console.info('x'); // doesn't work

melpomene 23.03.2018 15:23

@RyanSchaefer: Да, можно, если передать как ключ к объекту, например, как отметила Мари.

H.B. 23.03.2018 15:23

Я бы ответил, что вам следует реализовать шаблон проектирования Factory style в JS с образцом кода, но вопрос, помеченный как «дубликат», заблокирован. Почему я предлагаю поискать в Google "пример шаблона проектирования Javascript Factory"? Ну, вы пытаетесь определить функцию, которая будет возвращать объект класса в зависимости от переданного ей значения переменной. Если вы намереваетесь определить более одного значения класса (например, «settings», «config», «action»), то вы в основном будете следовать шаблону Factory. Быстрый поиск в Google покажет кучу хороших примеров.

dubmojo 23.03.2018 15:31
Поведение ключевого слова "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
12
636
0

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