dom1n1k
@dom1n1k

Можно ли в ES6 объединить классы в пространства имён?

Мне очень нравится архитектура и организация библиотеки Leaflet. Она включает в себя очень много сущностей (карты, слои, маркеры, балуны, векторные элементы и так далее). Но всё это сидит в общем объекте, который играет роль пространства имен. Очень понятно, наглядно, удобно.
L.Map
L.TileLayer
L.Marker

Как сделать в ES6 так же или нечто наподобии? Чтобы можно было потом писать:
var a = new MyLib.Dedka();
var b = new MyLib.Babka();
var c = new MyLib.Repka();

Просто классы Dedka и Repka, которые непонятно как и к чему относятся - это как-то не очень. Имена типа MyLibDedka - тоже не фонтан.
  • Вопрос задан
  • 329 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Но всё это сидит в общем объекте, который играет роль пространства имен. Очень понятно, наглядно, удобно.


И делают так потому что модулей нет. В ES6 модули есть и нет смысла более делать подобные кастыли. Сравните:

import L from 'leaflet';

var m = new L.Map();

// и
import {Map} from 'leaflet';

var m = new Map();


в целом вам никто не запрещает так делать. Как никак это все всего-лишь обертка над Object.create и старыми добрыми конструкторами.
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
А что мешает сделать вот так?
// MyLib.js
export class Dedka {}
export class Repka extends Dedka {}

// клиентский код
import MyLib from './lib/MyLib';

const a = new MyLib.Dedka();
const c = new MyLib.Repka();


Другое дело, что смысла в этом, при возможности написать
import {Dedka, Koshka as Zhoochka} from './lib/MyLib';
ни на грош. Сергей Протько абсолютно прав, все эти псевдо-«пространства имен» исключительно от отсутствия нормальной модульной системы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
20 янв. 2021, в 13:22
3000 руб./за проект
20 янв. 2021, в 12:56
1500 руб./в час
20 янв. 2021, в 12:53
20000 руб./за проект