Struppi: nur array-kopie verändern

Beitrag lesen

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.  
  
Ja aber nur für das eine Objekt.  
  

> Wenn man eine klassische Konstruktorfunktion wie A mit eingeschweißtem, unlesbarem Wert x hat, ist ein Kopieren wohl wirklich unmöglich.  
  
Nicht wirklich:  
~~~javascript
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();  
b.a();  

Struppi.