Namespaces в JavaScript. Ставим точку в вопросе

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Развитие языка javascript переносит выполнение кодов на распределенную сеть пользователей и снимает нагрузку с сервера. Это разумный подход. Введение в js ключевых слов class, extends и static дало возможность легко моделировать классами и объектами предметную область проекта. Это замечательно. Следующий вопрос, который необходимо рассмотреть при возрастании сложности js-проекта - это пространство имен. Именно оно позволяет избежать конфликтов с ворохом разнородных js-скриптов. Как показывает практика с этим вопросом почему-то возникли большие сложности. Смотри ссылки ниже:

https://stackoverflow.com/questions/881515/how-do-i-declare-a-namespace-in-javascript

https://habr.com/ru/post/527610/

https://habr.com/ru/post/31596/

https://habr.com/ru/post/527610/

https://habr.com/ru/post/528218/

Плохо. Очень сложные решения. Некоторую ясность в вопрос вносит следующая статья:

https://drbrain.ru/articles/js-namespaces/

Но и в ней мысль не доведена до логического конца. Однако чуток доработав эту статью, можно получить очень простую схему (паттерн) для работы с пространством имен:

/* namespaceOne */{

    class First {
        //статическое свойство
        static className = "First";
        constructor() {
            console.log("class First consructed");
        }

        print() {
            console.log("First print");
        }

        //статическая функция
        static printStatic() {
            console.log(First.className + " static print ");
        }
    }

    //наследование
    class Second extends First {
        constructor() {
            super();
            Second.className = "Second";
            console.log("class Second consructed");
        }
        //полиморфизм
        print() {
            console.log(Second.className + " print");
        }
    }

    class Third {
        className;
        encapsulation;
        constructor() {
            this.className = "Third";
            this.encapsulation = new Second(); //инкапсуляция
            console.log("class Third consructed");
        }
        print() {
            console.log("Third print");
        }
    }

    //экспорт пространства имен
    var namespaceOne = {First: First, Second: Second, Third: Third};
}


/* namespaceTwo */{
    //импорт пространства имен
    namespaceOne.First.printStatic();
    let second = new namespaceOne.Second();
    second.print();

    let ThirdClass = namespaceOne.Third;
    let third = new ThirdClass();
    third.print();
}

Есть такое чувство, что ключевые слова import, export - для такой схемы будут лишь синтаксическим сахаром. Теперь вы можете смело добавлять свой код в любой проект просто взяв его {в фигурные скобки}. С большой вероятностью конфликтов у вас не возникнет.

Источник: https://habr.com/ru/post/583130/


Интересные статьи

Интересные статьи

Хочу поделиться опытом автоматизации экспорта заказов из Aliexpress в несколько CRM. Приведенные примеры написаны на PHP, но библиотеки для работы с Aliexpress есть и для...
У некоторых бизнес-тренеров в области е-коммерса и консультантов по увеличению интернет-продаж на многие вопросы часто можно слышать универсальную отмазку — «надо тестировать» или другую (чтобы не...
Как быстро определить, что на отдельно взятый сайт забили, и им никто не занимается? Если в подвале главной страницы в копирайте стоит не текущий год, а старый, то именно в этом году опека над са...
В этой серии постов мы внимательно рассмотрим один из главных ингредиентов в контейнере – namespaces. В процессе мы создадим более простой клон команды docker run – нашу собственную программу, ко...
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...