ebody: Javascript Reference Types Beispiel und Frage

Beitrag lesen

problematische Seite

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