Hallo,
Wenn man eine klassische Konstruktorfunktion wie A mit eingeschweißtem, unlesbarem Wert x hat, ist ein Kopieren wohl wirklich unmöglich.
Nicht wirklich
Doch, denn deine copy-Funktion kopiert nicht das Objekt a, sondern erzeugt nur ein jungfräulich neues:
Object.prototype.copy = function() {
return new this.constructor();
}
function A(n) {
var x = n;
this.a = function() {alert(x)};
this.x = function(p) {x = p; };
}
var a = new A(1);
var b = a.copy();
//b.x(2);
a.a(); // 1
b.a(); // undefined !!!
Dafür hätte ein einfaches var b = new A();
gereicht.
Die object-Funktion dagegen erhält wenigstens das x, aber halt nicht als eigenes, und man kann es auch durch nachträgliche Zuweisung nicht hinbekommen.
=> Wirklich kopieren geht wohl doch nicht in so einem Fall.
Gruß, Don P