Synthèse automatique
Document de référence sur le pattern mixin en JavaScript, expliquant comment composer des comportements réutilisables dans des classes sans recourir à de longues chaînes d'héritage.
Points forts
- Décrit l'approche mixin fonctionnel avec un exemple complet d'emboîtement de classes
- Couvre l'alternative par injection de méthodes via Object.assign
- Signale explicitement les compromis : collisions silencieuses, pile d'appels confuse, instanceof inopérant avec Object.assign
- Indique quand ne pas utiliser le pattern et mentionne le typage par intersection en TypeScript
Limites
- Format court de type fiche mémo : peu d'exemples approfondis ou de cas réels
- Ne traite pas les cas avancés comme les symboles, les propriétés privées ou les accesseurs dans les mixins
- Suppose une bonne familiarité avec les classes ES6 et les chaînes de prototypes
À consulter lorsqu'on hésite sur la façon de partager un comportement entre plusieurs classes non liées sans créer de classe de base commune.
Inutile pour de simples fonctions utilitaires ou lorsque l'injection de dépendances et la composition par fonctions suffisent.
Analyse de sécurité
SûrThis is a pure reference document describing the JavaScript mixin pattern. It declares no tools, executes no commands, and contains only explanatory prose and a benign illustrative code snippet (JSON.stringify/Object.assign on a local object). No network calls, filesystem access, secret handling, or destructive instructions are present, so there is no meaningful execution risk.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
I have three unrelated classes (User, Order, Invoice) that all need serialize/deserialize methods. Show me how to implement this with the functional mixin pattern instead of a shared base class.Review my `class Report extends Logging(Serializable(Base)) {}` setup and flag any method-name collisions between the mixins and the risks in the order they're applied.Convert this JavaScript mixin pattern to TypeScript and type the mixed-in methods correctly using intersection types.JS Mixin Pattern
Add reusable behaviors to classes without deep inheritance chains
When to Use
- Multiple unrelated classes need the same capability (e.g., serialization, event handling, logging)
- Single inheritance is not sufficient to compose all required behaviors
- You want to share behavior without creating a shared base class
Instructions
- Define a mixin as a function that takes a superclass and returns a new class extending it.
- Apply mixins by chaining:
class MyClass extends Mixin2(Mixin1(Base)) {}. - Keep mixins focused on a single capability — avoid fat mixins that do too much.
- Alternatively, use
Object.assign(Target.prototype, mixinMethods)for simpler method injection.
// Functional mixin approach
const Serializable = (Base) =>
class extends Base {
serialize() {
return JSON.stringify(this);
}
static deserialize(json) {
return Object.assign(new this(), JSON.parse(json));
}
};
const Timestamped = (Base) =>
class extends Base {
constructor(...args) {
super(...args);
this.createdAt = new Date();
}
};
class User extends Serializable(Timestamped(class {})) {
constructor(name) {
super();
this.name = name;
}
}
const u = new User('Alice');
console.log(u.serialize()); // {"name":"Alice","createdAt":"..."}
- Use TypeScript intersection types to type mixed-in methods correctly.
Details
JavaScript's single-prototype-chain inheritance means a class can only extend one parent. Mixins work around this by composing behaviors through function application rather than inheritance.
Trade-offs:
- Method name collisions between mixins are silent — the last applied mixin wins
- Stack traces can be confusing — intermediate mixin classes appear in the trace
instanceofchecks do not work for mixins applied viaObject.assign(only for the class mixin approach)
When NOT to use:
- When composition via plain function calls or hooks would work just as well
- When the behaviors are tightly coupled to specific base classes — inheritance is cleaner
- For simple utility methods — just import a utility function
Source
https://patterns.dev/javascript/mixin-pattern
Process
- Read the instructions and examples in this document.
- Apply the patterns to your implementation, adapting to your specific context.
- Verify your implementation against the details and edge cases listed above.
Harness Integration
- Type: knowledge — this skill is a reference document, not a procedural workflow.
- No tools or state — consumed as context by other skills and agents.
Success Criteria
- The patterns described in this document are applied correctly in the implementation.
- Edge cases and anti-patterns listed in this document are avoided.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/js-mixin-pattern-ms1aw5v1/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/js-mixin-pattern-ms1aw5v1' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/js-mixin-pattern-ms1aw5v1/download' --output '.skill-downloads/js-mixin-pattern-ms1aw5v1/SKILL.md.part' && mv '.skill-downloads/js-mixin-pattern-ms1aw5v1/SKILL.md.part' '.skill-downloads/js-mixin-pattern-ms1aw5v1/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Le fichier ne fournit pas un en-tête name/description exploitable pour cette procédure native. Le téléchargement reste disponible pour lecture ; utilisez le mode manuel ci-dessous.
Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/js-mixin-pattern-ms1aw5v1/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.