Treci la conținutul principal

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.

Prompt
Scrie un program TypeScript cu o clasă TextDocument (titlu, subsol, tablou de etichete) și o metodă clone care copiază documentul, inclusiv o copie nouă a tabloului său de etichete. Clonează un șablon într-un raport, schimbă titlul raportului și adaugă o etichetă suplimentară, apoi afișează titlul și etichetele ambelor, ca să arăți că șablonul nu a fost afectat.
Ieșire: program TypeScript și rezultatul capturat

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.