Don P: nur array-kopie verändern

Beitrag lesen

Hallo,

Mir ging es nicht um die concat Lösung - das ist doch längst gegessen - sondern darum welche Datentypen kopiert werden und welche nicht.

Meinetwegen.

Crockfords geniale Funktion

Die auch nur z.T funktionert:

function  object(o) {

function F() {};
  F.prototype = o;
  return new F();
}

function A(n) {
var x = n;
this.a = function() {alert(x)};
this.x = function(p) {x = p; };
}
var a = new A(1);
var b = object(a);
b.x(2);
a.a();
b.a();

  
Weil b.x(2) auch das Objekt a verändert? Das meinte ich z.B. mit Einschränkungen.  
b kann sich natürlich keine eigene, als Closure versteckte Variable x aus dem Hut zaubern, auf die man nicht mal lesend zugreifen kann. Deshalb ist sie ja wohl auch versteckt worden, damit sie gerade nicht kopierbar ist.  
  
Wenn man eine klassische Konstruktorfunktion wie A mit eingeschweißtem, unlesbarem Wert x hat, ist ein Kopieren wohl wirklich unmöglich. Wäre x wenigstens lesbar, z.B. als a.getX(), könnte man z.B. `b = new A(a.getX());`{:.language-javascript} benutzen.  
  
\---  

> Wie gesagt, wenn du null nicht benutzen willst, darfst du es nicht benutzen.  
  
Es geht doch nicht darum, ob ich null benutzen WILL oder nicht, es ist nunmal da und kann an Stellen auftauchen, wo auch Objekte stehen können. typeof sagt mir aber leider den Unterschied nicht, den es tatsächlich gibt, und nur darum geht es.  
  

> Aber als Typ muss es ein 'object' sein, sonst stimmen die Funktionen nicht mehr die immer ein Objekt als Rückgabetyp haben.  
  
Dass es intern als Object durchgeht, damit die Funktionen stimmen, ist mir doch so breit wie lang. Ich hätte nur gerne, dass typeof mich darüber nicht im Unklaren lässt. Du willst es anscheinend nicht verstehen, also lassen wir das.  
  
Gruß, Don P