prototype

liquidbeats

Erfahrenes Mitglied
Nabend,

kann mir jemand kurz erklären wofür prototype steht?! Oft gesehen aber nier verstanden. Habe mit Google zwar einige Tutorials gefunden, nicht aber etwas, was mir dies näher erläutert.

Bsp.
PHP:
this.prototype.showContent = function(what) { 
// ...........
}

Danke schonmal
Grüße
 
Hi,

Einfach ausgedrückt: wenn ich eine Funktion als Prototype definiere, steht sie in allen Objekten dieses Typs zur Verfügung:
Code:
MovieClip.prototype.whatsMyX = function() {
    trace(this._x);
}

irgendeinMovieClip._x = 150;
irgendeinMovieClip.whatsMyX(); // Ausgabe: "150"

Eine Liste von String-Prototypes findest Du z.B. hier (klick) - vielleicht wird der Einsatzzweck dadurch deutlicher. ;)

Gruß
.
 
Hallo Tobias Menzel,

vielleicht wird der Einsatzzweck dadurch deutlicher. ;)
Irgendwie nicht.

Mal ein Ausschnitt aus PHP

PHP:
$string = "123";
function write(){
    global $string;
   echo $string; 
}
// ausgabe 123

Würde dies also bedeuten, dass ich damit Variablen Globalisieren kann?

steht sie in allen Objekten dieses Typs zur Verfügung
Das habe ich im wesentlichen nicht verstanden. Kann also auch Ebenen Übergreifend sein?

Grüße
 
Hi,

wenn Du der MovieClip-Klasse einen Prototype hinzufügst, steht diese Funktion dann allen MovieClips als Methode zur Verfügung.

Probier mal:
Code:
MovieClip.prototype.jump = function() {
    var by = this._y;
    this._y -= 50;
    this.onEnterFrame = function() {
        this._y += (by - this._y) / 5;
        if (Math.abs(by - this._y) < 1) {
            delete this.onEnterFrame;
        }
    }
}
Code:
irgendeinMC.jump();
Du hast nun eine Methode des MovieClip-Objekts erstellt, mit der Du jeden beliebigen MC kurz "springen" lassen kannst.

Gruß
.
 
Und es ist dabei egal in welchem MC das enthalten ist, weiterhin auch die Tiefe? Wenn ja ist das für mich etwas Sehr nützliches :)
Ich werde das mal Probieren.

Danke dir :)

Grüße
 
Hi,

es hat nichts mit Tiefen, Ebenen, Zeitleisten etc. zu tun. In der Regel erstellst Du einen Prototype auch nicht auf einem bestimmten Objekt, sondern der gesamten Klasse (MovieClip.prototype).

Gruß
.
 
Hallo Tobias,
genau zu dem Thema wollte ich auch eine Frage stellen.
Das hast du wirklich sehr schön erklärt - Danke!

Jetzt habe ich aber noch ein paar Fragen dazu:

Bei welchen festen in Flash MX vordefinierten Objekten kann man prototype anwenden?

MovieClip und String habe ich gefunden. Wo finde ich eine Auflistung zu den unterstützten Objekten. Also ob z.B. so etwas in Flash MX gehen würde:

Button.prototype.aufleuchten = function (){
}

In der Flash MX-Hilfe steht zum prototype sehr wenig...

Vielen Dank für deine/eure Hilfe
 
Hallo,

prototype lässt sich vor allem auf die Object-Klasse anwenden - und deshalb auf jedes Klassen-Konstrukt in ActionScript, da alle Klassen in ActionScript Erweiterungen dieser Klasse sind. Deshalb würde deine Funktion "aufleuchten" nun auch für jeden Button verfügbar sein. Ein Prototype der Object-Klasse wird an alle Klassen vererbt.

gruss
 
Hi Luke,

vielen Dank für deine Antwort!

Jetzt habe ich gestern Abend ein wenig herumprobiert und wollte mir ein Alphatrween-Prototype basteln, da der hier im Tutorial nur unter MX 2004 läuft und ich nur MX habe.
Da hat es jetzt sicher einige Fehler drinn - bin erst jetzt vermehrt mit AS dabei:)

Das Problem ist, dass das Script auf den ganzen Film und nicht auf einen einzelnen MC wirkt und die Intervalle auch nicht angesprochen werden...

//Script im ersten Schlüsselbild auf der Bühne
PHP:
_globalschalter;
schalter = false;

_globaldurchlauf;
durchlauf=0;


function ausblenden(ausblendenschritte){
	if(this._alpha >0){
		this._alpha -=ausblendenschritte;
	}
	else{
		schalter = true;
		delete this.onEnterFrame;
	}
}

function einblenden(einblendenschritte){
	if(this._alpha <100){
		this._alpha += einblendenschritte;
	}
	else{
		schalter = false;
		durchlauf ++;
		trace("Nr   " + durchlauf)
		delete this.onEnterFrame;
	}
}

MovieClip.prototype.fading = function(anzahl, ausblendenschritte, einblendenschritte, startalphawert){
	if(durchlauf < anzahl){
		if(schalter == false){
			clearInterval(this.intervall_einblenden);
			var intervall_ausblenden = setInterval(this._root.ausblenden(ausblendenschritte),1000);
			trace("test")
		}
		else{
			clearInterval(this.intervall_ausblenden);
			var intervall_einblenden = setInterval(this._root.einblenden(einblendenschritte),5);	
		}
	}
	else{
		//Durchlauf für weitere MCs zurücksetzen - wird später aus dem Code entfernt
		durchlauf=0;
		delete this.onEnterFrame;
	}
}

//Aufruf auf einem MC
this.fading(1,2,2);


Dann habe ich noch eine Frage für was steht .sX und .sY in dem Wabber-Tutorial hier von Matze K. :)
Ich habe nichts in der Flashreferenz finden können.

Vielen Dank für eure Hilfe.
 

Neue Beiträge

Zurück