Hallo,
Das ist schon klar, das Problem ist aber wenn ich im Kontruktor Parameter brauche, was dann?
var obj = function(name) {
this.name = name || 'default';
}
var newObj = object(obj);
var newObj2 = object(obj);
alert( newObj.name + '\n' + newObj2.name );
Wer macht denn sowas ;-)
Das ist ja kein "normaler" Konstruktor mehr, sondern einer, der das zu erzeugende Objekt zuerst aus Parametern zusammenbasteln muss. Für solche speziellen Fälle kann man ja weiterhin mit Konstuktoren und "new" arbeiten.
Oder man bastelt sich (wie ich) eine weitere kleine Helferfunkrion:
~~~javascript
var object = function(o){function F(){}F.prototype=o;return new F();};
var oobject = function(s,t){var c=object(s);for(var p in t){c[p]=t[p];}return c;}
var obj = {
name: 'default'
}
var newObj = object(obj);
var newObj2 = object(obj);
alert( newObj.name + '\n' + newObj2.name ); // 2 mal 'default' vom Prototyp
var newObj = oobject(obj, {name: 'Rumpelstilz'});
var newObj2 = oobject(obj, {name: 'Königin'});
alert( newObj.name + '\n' + newObj2.name ); //'Rumpelstilz', 'Königin' von eigenen Eigenschaften
delete newObj.name; // eigene Eigenschaft wieder entfernen
alert( newObj.name + '\n' + newObj2.name ); // 'default' vom Prototyp, 'Königin' von eigener Eigenschaft
Als zweiten Parameter übergibt man "oobject" einfach ein Objekt, dessen Eigenschaften/Methoden das neue Objakt dann selbst haben soll, d.h. diese überschreiben den Wert vom Prototyp, bzw. eigentlich verstecken sie ihn nur. Wenn man wie im Beispiel so eine eigene Eigenschaft dann wieder entfernt, scheint wieder der Prototyp durch.
Um z.B. ein Objekt zu klonen, das alle Eigenschaften selbst hat, notiert man einfach: var newObj = oobject(obj, obj);
Gruß, Don P
--
sh:( fo:) ch:? rl:( br:] n4:~ ie:% mo:? va:{ js:) de:/ zu:] fl:( ss:| ls:&
sh:( fo:) ch:? rl:( br:] n4:~ ie:% mo:? va:{ js:) de:/ zu:] fl:( ss:| ls:&