Struppi: nur array-kopie verändern

Beitrag lesen

Das wird alles in dem von mir verlinktem Thread erklärt.

Findest du? Naja, die concat-Lösung dort gefällt mir gar nicht, und man muss für die einfache Aufgabe auch nicht unbedingt gleich am Prototyp "rumpfuschen" ;)

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

Auch Objekte lassen sich übrigens kopieren (mit Einschränkungen). 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();  

Angenommen, wir wollten auf diese Weise alle Array-Inhalte wirklich kopieren, dann müsste man die Objekte gesondert behandeln, d.h. sie z.B. mit typeof untersuchen um ggf. die object-Funktion anwenden zu können, und schon sind wir wieder beim typeof null === 'object' -Problem, gell Struppi :))

Wie gesagt, wenn du null nicht benutzen willst, darfst du es nicht benutzen. Aber als Typ muss es ein 'object' sein, sonst stimmen die Funktionen nicht mehr die immer ein Objekt als Rückgabetyp haben.

Struppi.