Thread Ein paar Programmiertricks (39 answers)
Opened by roooot at 2008-03-22 23:16

murphy
 2008-03-27 02:11
#107525 #107525
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
KurtZ+2008-03-25 23:56:28--
hmm dann haben wir unterschiedliche Vorstellungen von Klonen, in "perlisch" gesprochen ist o1.__proto__ eine Referenz auf o0. Klonen wäre für mich eine 1 zu 1 Kopie des Objektes, also in Perl eine Kopie der Hashes, %o1=%o0. [...]


Naja, das neue Objekt ist konzeptionell schon eine Kopie des alten, denn sämtliche Eigenschaften und Methoden des alten Objektes sind auch im neuen sichtbar. Dass die Eigenschaften nicht wirklich kopiert, sondern nur eine Verknüpfung auf das Originalobjekt gesetzt wird, ist zum einen effizienter als eine volle Kopie anzufertigen und zum anderen hat es, wie man's nimmt, den zusätzlichen Vor- oder Nachteil, dass nachträgliche Änderungen am Original sich auf die Kopie auswirken können.

Quote
Bin übrigens darauf hingewiesen worden dass nur Netscape/Mozilla direkten Zugriff auf __proto__ erlauben.


Das war mir auch bewusst. Aber nachdem es jetzt leider aufgefallen ist, muss ich wohl doch noch die standardkonforme Variante der clone-Methode nachreichen ;-)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
Object.prototype.clone = function () {
var CloneConstructor = function () { }
CloneConstructor.prototype = this
return new CloneConstructor()
}

var o0 = { a: 1, b: 2 }

var o1 = o0.clone()
alert(o1.b)


Die Funktion sieht halt etwas abstrus aus, ist aber leicht zu verwenden und auch noch ein gutes Beispiel für die Veränderung eines existierenden Prototypen ;-)
When C++ is your hammer, every problem looks like your thumb.

View full thread Ein paar Programmiertricks