El patrón Prototype permite copiar un objeto ya configurado en lugar de reconstruirlo desde cero.
1. El Problema de Partida
Cada nuevo post de patrones-de-diseno repite el mismo esqueleto de frontmatter (category, type: "handbook", estructura de secciones, bloque > 💡 Ver Caso Práctico, CodeTabs con 3 pestañas). Escribirlo a mano en cada artículo nuevo es repetitivo y propenso a olvidar un campo (como patternType, que rompe el agrupado en ModuleLessonsNav).
2. La Solución Prototype
Un objeto PostPrototype ya configurado con los valores por defecto del proyecto se clona y se ajustan solo los campos específicos del nuevo post.
// scripts/PostPrototype.js
class PostPrototype {
constructor(overrides = {}) {
this.category = 'design-patterns';
this.type = 'handbook';
this.patternType = 'creacionales';
this.sections = ['Propósito y Caso de Uso', 'Estructura del Patrón', 'Flujo de Funcionamiento', 'Ejemplos de Implementación Reales'];
Object.assign(this, overrides);
}
clone(overrides = {}) {
// Copia superficial + copia del array de secciones para no compartir referencia
return new PostPrototype({ ...this, sections: [...this.sections], ...overrides });
}
}
// Prototipo base para todos los "handbook" de patrones creacionales
const creationalHandbook = new PostPrototype();
// Nuevo post: solo se ajustan título y translation_id, el resto viene clonado
const bridgePost = creationalHandbook.clone({
patternType: 'estructurales',
title: 'Patrón Bridge',
translation_id: 'bridge-pattern-guide',
});
console.log(bridgePost.sections.length); // 4, heredado sin repetirlo a mano
console.log(creationalHandbook.patternType); // "creacionales" — no afectado por el clon3. Ventajas
- Consistencia garantizada: todos los posts clonados parten de la misma estructura de secciones y campos obligatorios.
- Menos repetición manual: el autor solo escribe lo que cambia (título,
translation_id,patternType). - Copia segura: al clonar el array
sections, editar la copia (bridgePost.sections) nunca muta el prototipo original.