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.