Ce este
Șablonul Prototype creează obiecte noi clonând unul existent în loc să le construiască de la zero. Pregătești un obiect ca model, apoi îl copiezi și schimbi doar ce diferă.
Lucrul pe care trebuie să îl nimerești: o copie simplă este superficială. Împrăștierea unui obiect, { ...doc }, copiază referința către tabloul de etichete, așa că și copia, și originalul folosesc în continuare un singur tablou — adaugi un element într-unul și se schimbă și celălalt. O metodă clone() corectă copiază și tabloul, așa că clona este cu adevărat independentă.
Exemplu: un șablon de document
Șablonul poartă părțile pe care le repetă fiecare document. clone() îl copiază — inclusiv tabloul de etichete — așa că modificarea copiei lasă șablonul neatins.
Clonează, apoi schimbă diferența
Raportul a primit un titlu nou și o etichetă în plus, iar șablonul are în continuare doar [ 'ciornă' ] — pentru că clone() a copiat tabloul cu [...tags] în loc să îl folosească în comun. Pentru date simple, fără metode, funcția încorporată structuredClone() face aceeași copie profundă într-un singur apel.
Ieșire: program TypeScript și rezultatul capturat
class TextDocument {
title: string
footer: string
tags: string[]
constructor(title: string, footer: string, tags: string[]) {
this.title = title
this.footer = footer
this.tags = [...tags]
}
// clone copiază documentul — inclusiv tabloul din interiorul lui.
clone(): TextDocument {
return new TextDocument(this.title, this.footer, this.tags)
}
}
const template = new TextDocument("Fără titlu", "PromptCookbook 2026", ["ciornă"])
const report = template.clone()
report.title = "Raport anual"
report.tags.push("finanțe")
console.log("șablon:", template.title, template.tags)
console.log("clonă: ", report.title, report.tags)
Când să îl folosești
Folosește-l când obiectele noi sunt în mare parte copii ale unuia pregătit dinainte — documente dintr-un șablon, entități de joc dintr-un generator, date de test dintr-un set fix.
Evită-l când obiectele se construiesc ieftin de la zero sau conțin numai valori simple. Pentru un obiect plat, cu șiruri și numere, o copie prin împrăștiere { ...doc } este deja o copie completă.
Avantaje și dezavantaje
Avantaje: creare ieftină a obiectelor preconfigurate; șablonul documentează valorile implicite; nu repeți codul de pregătire.
Dezavantaje: copierea profundă se greșește ușor, în moduri subtile — un tablou sau un obiect imbricat uitat leagă pe tăcute clona de original; în timp, clonele se îndepărtează de șablon fără să observi.