Сталкивались ли вы с ситуацией, когда вам нужно больше, чем просто то, что родительский класс может предоставить дочернему классу?
У 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 еще не учитывает эту функцию.