Hallo,
warum behält elementNum
den ursprünglichen Wert? Es wird zwar ein Value Type
gespeichert, aber dieser wird aus this.arrAllDatasets
(Reference Type
) genommen und wenn sich der Wert von einem Reference Type
ändert, wird er überall geändert. So habe ich es zumindest verstanden.
/*
* Warum behält elementNum den ursprünglichen Wert?
*/
class Datasets{
constructor(arrData) {
// Reference Type
this.arrAllDatasets = arrData;
// Reference Type
this.datasets = this.arrAllDatasets;
// Value Type von einem Reference Type
this.elementNum = this.arrAllDatasets.length;
}
}
let myMovieDb = new Datasets(['Prometheus','Free Guy','Shutter Island','The Avengers']);
// Reference Type
console.log('arrAllDatasets 1: ', myMovieDb.arrAllDatasets); // arrAllDatasets 1: ['Prometheus', 'Free Guy', 'Shutter Island', 'The Avengers']
// Reference Type Wert ändern
myMovieDb.datasets.splice(2, 2);
// Value Type von einem Reference Type
console.log('elementNum: ', myMovieDb.elementNum); // elementNum: 4
// Reference Type
console.log('datasets: ', myMovieDb.datasets); // datasets: (2) ['Prometheus', 'Free Guy'
// Reference Type
console.log('arrAllDatasets 2: ', myMovieDb.arrAllDatasets); // arrAllDatasets 2: (2) ['Prometheus', 'Free Guy']
Hintergrund der Frage ist, dass ich das Array nur einmal an den Constructor übergeben möchte und dann das Array einmal mit allen ursprünglichen Daten speichern möchte und einmal mit geänderten Daten. Wenn z.B. eine Methode aufgerufen wird, um Daten in das Array hinzuzufügen oder zu entfernen.
Das habe ich bisher nur hinbekommen. wenn ich das Array in der Klasse in einer get Methode direkt festlege. Aber das Array soll an die Klasse übergeben werden. Ich habe dafür eine set Methode erstellt, aber dann hat es schon nicht mehr funktioniert.
Oder wäre es falsch, schlechter Programmierstil, wenn man in einem Objekt 2 verschiedene Zustände vom Array speichern möchte und es wäre besser einfach 2 Objekte zu erstellen? In dem einen speicher die ursprünglichen Array Daten, in dem anderen die angepassten Daten?
Gruß ebody