Сталкивались ли вы с ситуацией, когда вам нужно больше, чем просто то, что родительский класс может предоставить дочернему классу?

У Php есть свой способ решения этой ситуации, Php — Traits. Trait — это классоподобная структура, которая позволяет вам наследовать методы других классов, особенно тех, у которых уже есть родительский класс. Это позволяет вам повторно использовать код, который уменьшает ограничение одиночного наследования, позволяя разработчику свободно повторно использовать наборы методов в нескольких независимых классах, находящихся в разных иерархиях классов.

Представляя trait.js, создайте несколько трейтов и используйте их в любой части вашего кода, особенно если вы используете архитектуру ООП в своих проектах. Очень простое в использовании решение, и установить его можно либо с помощью NPM, либо с помощью CDN пакета, и вы можете работать, начиная с крупных проектов или даже для тех, кто только начинает с нуля.

Давайте попробуем!

Прежде всего, мы должны установить пакет, давайте использовать установку NPM для этого примера.

npm install trait.js --save

Допустим, нам нужен трейт, который может транслировать события по всему приложению.

const trait = require('trait.js');
const EventDriver = trait({
    /**
     * Trigger an event using an API call
     * @param {string} event
     */
    broadcast(event){
         // TODO: API call here to trigger the event
    },
});

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

class User extends BaseModel {
     constructor({ firstname, lastname }){
         this.firstname = firstname;
         this.lastname = lastname;
     }
}

EventDriver.in(User); // to inherit the methods of the trait

Затем мы попробуем применить его к фактическому использованию класса User.

let newUser = new User({
   firstname: "Foo",
   lastname: "Bar"
});

// We can now use the methods from the trait
newUser.broadcast("SAMPLE_EVENT");

В этом примере любые другие классы, в которых вы хотите иметь возможность использовать методы, перечисленные в свойстве EventDriver, вам не придется писать его повторно для каждого из классов или импортировать его каждый раз. вы хотите использовать его в своих компонентах, вместо этого сам экземпляр может использовать методы, присутствующие в этом свойстве. Что было бы намного проще, не так ли? При таком подходе у вас будет централизованный код и его будет проще поддерживать.

Я надеюсь, что данный пример поможет вам понять концепцию того, что делает пакет.

Этот проект в настоящее время все еще находится в стадии разработки, в будущем у него могут быть другие функции и улучшения, чтобы сделать его более полезным.

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

Отказ от ответственности

Этот пакет является личным проектом и может быть не самым эффективным и стандартным способом реализации. Цель проекта — поделиться фрагментом кода, который может помочь другим разработчикам, которые ищут Javascript-эквивалент Php Traits. Уже есть другие пакеты, которые пытались имитировать эту функцию и применить ее к Javascript, но я нахожу их слишком сложными. Новый пакет представляет собой гораздо более простое, легко читаемое и прямолинейное решение, поскольку Javascript еще не учитывает эту функцию.