Perché il value della textarea viene sovrascritto in continuazione fino a che non arrivi all'ultimo valore (che quindi sostituisce i precedenti). document.write() invece "scrive" nel documento il codice che tu gli dici di scrivere, finché lo script non termina.
In pratica, il tuo codice non fa che impostare il valore della textarea più volte, sovrascrivendo sempre il valore impostato precedentemente.
Per risolvere il problema devi "concatenare" il valore attuale della textarea con il valore che viene "aggiunto" di volta in volta dentro di essa:
codice:
this.stampavendite = function() {
for (i=0; i<this.venduti.length; i++) {
miatextarea.value += this.venduti[i].nome + this.venduti[i].costo + this.venduti[i].numero;
}
}
Nota la sintassi "miatextarea.value +=". Questa sintassi in pratica, legge il valore presente nella textarea in un dato momento e gli "accoda" un nuovo valore. E' l'equivalente di:
codice:
miatextarea.value = miatextarea.value + NUOVOVALORE