Per Actionscript einemObjekt alle eigenschaften eiens anderen Objektes zuweisen.

Schrumpel

Mitglied
Wie kann ich einem Objekt die kompletten werte eines anderen Objekts per actionscript zuweisen? Normal gibts ja eine funktion dafür. da kann ich ja einem Objekt die kompletten attribute eines anderen zuweisen.
 
Ahhh ! Endlich mal eine nette Frage !

PHP:
//Erstellen einer neuen Klasse Katze
//mit der Eigenschaft 'name'
//mit der Eigenschaft 'fellfarbe'

function Katzen (name, fell) {
	this.name=name;
	this.fell=fell;
}
//Action Script ist im Gegensatz zu Java eine Prototyp-basierte Programmiersprache
//deshalb schreiben wir Methoden und Eigenschaft einer Klasse in den Prototyp. Der Prototyp
//ist nichts anderes als eine Eigenschaft der Klasse und ist das wichtigste Element bei 
//der Vererbung. AS funktioniert mit der sog. prototype-basierten Vererbung. Wenn jemand
//Fragen dazu hat bitte stellen.

Katzen.prototype.pfoten=4;
Katzen.prototype.miauen=function(){
	trace ("Miauuuu");
}
//wir generieren jetzt aus der Klasse ein neues Objekt, ein sog. Objekt-Instanz
//die grau-fellige kity is geboren, und wie alle kleinen Katzen kann sie miauen
//und hat 4 Pfoten
Kity = new Katzen ("Kity", "grau");
//testen
Kity.miauen ();
trace (Kity.pfoten);
trace (Kity.name);
trace (Kity.fell);

Ist vielleicht mehr als du wolltest. einfach nachfragen

c ya
:)
 
@Skyla:
Schöne Erklärung. :)

Nur eine Frage:
Wenn du sagst, dass AS im Gegensatz zu Java eine prototyp-basierte Programmiersprache ist (gibt's den Ausdruck?), als was würdest du dann Java klassifizieren?

Mein Vorschlag wäre folgender:
PHP:
function uebergeben(quelle, ziel) {
    for (a in quelle) {
        ziel[a] = quelle[a];
    }
}
sollte schon reichen zur Übergabe vom source-Objekt zum target-Objekt.

Beispielsweise:
PHP:
obj1 = { x:10, y:20 };
obj2 = {};

function uebergeben(quelle, ziel) {
    for (a in quelle) {
        ziel[a] = quelle[a];
    }
}

uebergeben(obj1, obj2);

trace(obj2.x);
hth,
Geist
 
Hi Geist

Java und C++ sind ja wie AS auch objekt-orientierte Programmiersprachen. Im gegensatz zu as sind sie aber klassen-basierte sprachen. du findest in as den befehl 'class' ja nirgends. bei as übernimmt die eigenschaft prototype diese Funktion.

Bsp Java
PHP:
class Motion (){
    this.x =10;
    this.y =10;
    upDatePosition (){
          this.x++;
          this.y++;
   }
}

Bsp AS

PHP:
function Motion (){
    this.x =10;
    this.y =10;
}
Motion.prototype.upDatePosition (){
          this.x++;
          this.y++;
}


Jetzt denkst Du vielleicht: ja aber ich kann ja bei AS die Methode auch in den Konstruktor schreiben. Stimmt, das geht, hat aber einen riesen Nachteil: Jedes mal wenn du ein Instanz-Objekt durch Aufrufen des Konstruktors erzeugst, erhält dieses ebenfalls diese Methode.

Beim schreiben in den Prototyp erhält, die Instanz die Methode nicht. Es wird nur ein Referenz in die Eigenschaft __proto__ reingeschrieben, welche auf den Prototyp der Klasse (sorry für den Ausdruck) verweist.

Warum der ganze Jazz ? Stell Dir mal vor, Du erzeugst aus einer Klasse 100 Instanzen, jede hat alle Methode der Klasse. Da brauchst Du einen starken Prozessor...

Das ist der feine Unterschied zwischen 2 Programmiersprachen, die beide nach den gleichen OOP-Prinzipien funktionieren.

Sorry, wenn ich Dich langweile, aber vielleicht interessiert's ja den Kollegen schrumpel (guter Name..)
 
Kann's sein, dass du dich grad ein stück verlaufen hast? :)

"class" aus Java wird in AS durch "prototype" ersetzt?

Klassen erzeuge ich in AS doch, wie du selbst gemeint hast mit "function", nicht dem zugehörigen prototype-Array.

Was es ansonsten damit auf sich hat, verstehe ich größtenteils von JavaScript-Seite her, auch wenn ich direkt auf Flash bezogen die Ideen nicht kannte, aber jetzt ja bestätigt bekommen habe, danke. ;-)

__proto__ muss ich mir nochmal reinzimmern, das stand zwar auch im Definitive Guide, aber ich hab' dann irgendwann doch mal aufgehört zu lesen, weil's mir mit englischen Begriffen zu bunt wurde...
(dachte das ganze Buch lang bspw., dass "inherit" verbergen/verstecken heißt und hab dann erst irgendwann entdeckt, dass doch ein "vererben" dahintersteckt :rolleyes: )

n8 (oder vilelleicht liest man sich ja doch noch mal),
Geist
 
Kann's sein, dass du dich grad ein stück verlaufen hast?

Undankbarer Sack !!:-)

hab halt ein enormes mitteilungsbedürfnis. :rolleyes:

aber es ist wirklich so. Prototype übernimmt in as die aufgabe von class in java. __proto__ zu verstehen ist wirklich einfach. es ist eine eigenschaft, die als wert eine referenz auf den prototype der klasse enthält. das kann man im output-fenster sogar offenlegen.

aber jetzt reichts wirklich, vorallem hab ich das gefühl, das interessiert hier kein schwein:-)

sleep well
 
Zuletzt bearbeitet:
Schöne Dank für die tollen Beispiele. Bringt mich voll weiter. Ich wollte hier aber keine wilde Diskusson entfachen. Bleibt alle ganz locker und genießt das leben.
 
Zurück