kostenloser Webspace werbefrei: lima-city


Klassen in Javaskript

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    marius71

    marius71 hat kostenlosen Webspace.

    Hallo,
    Ich habe mit Javaskript eine Funktion geschrieben, die einen Ladebalken füllt.
    Die ID des Ladenbalken übergebe ich der Funktion, so dann die Funktion jeden beliebigen Ladenbalken füllen kann.

    Wenn ich allerdings einen 2. Balken füllen möchte, solange der 1. noch läuft, greift der 2. Balken auf die Werte des 1. zu und beginnt dann mit der Füllung dort, wo gerade der 1. Balken ist.

    Mit einer Programmiersprache hätte ich wahrscheinlich mehrere Objekte erstellt, sodass beim Aufruf nicht die gleichen Variablen benutzt werden.

    Daher meine Frage: Kann ich in Javaskript auch Klassen bzw. Objekte erstellen?
    Wenn ja: wie? hat jemand ein kurzes Beispiel?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    Jain. Richtige Klassen nicht, nur Prototypen. Kannst du aber exakt als das nutzen (Ist es eig auch. Aber mir wurde hier in Lima irgendwo mal gesagt man darf Prototyp nicht gleich Klasse setzen. kA warum).

    Ich nutze allerdings kein Prototyping, sondern ein bissel anderes Konstrukt, das aber an sich auch funktioniert. Es beherrscht private and public, aber keine Polymorphie meineswissens.

    Hier ein Codebeispiel:
    function myClass {
        //Hier ist dein Konstruktorraum. Wenn du etwas festlegen willst oder so, dann hier zwischen den funktionen.
    
        //Hier die beispiele für Private eigenschaft und methode. sie werden einfach so in diesem namespace deklariert
        function privateMethode() {}
        var privateEigenschaft = 0;
    
        //Hier nun die deklaration für public eigenschaften und methoden. der einzige unterschied ist eig ein this.
        this.publicEigenschaft = 4;
        this.publicMethode = function() {
            privateMethode();
        }
    }
    
    var instanz = new myClass;
    myClass.publicMethode();


    An sich sollte man aus dem Code schon bissel erkennen. Die "Klasse" heißt myClass und wird als Funktion eingebaut. Die inneren Funktionen und Variablen ohne "this." werden als private angenommen, mit this. als public.
    Hintergrund hier sind Closures. Sie legen für einen Neuaufruf auch neue Funktionsobjekte an, das geschieht ganz automatisch. Die Privaten Methoden werden außerdem eig in Variablen gespeichert und als anonyme Funktionen deklariert, aber das siehst du ja.

    Ich hoffe das hilft. Wenn nicht gern nachfragen. Ich habs zwar schon lang nicht mehr gemacht aber so sollte es Korrekt sein.
    Liebe Grüße
  4. Autor dieses Themas

    marius71

    marius71 hat kostenlosen Webspace.

    ggamee schrieb:
    Jain. Richtige Klassen nicht, nur Prototypen. Kannst du aber exakt als das nutzen (Ist es eig auch. Aber mir wurde hier in Lima irgendwo mal gesagt man darf Prototyp nicht gleich Klasse setzen. kA warum).

    Ich nutze allerdings kein Prototyping, sondern ein bissel anderes Konstrukt, das aber an sich auch funktioniert. Es beherrscht private and public, aber keine Polymorphie meineswissens.

    Hier ein Codebeispiel:
    function myClass {
        //Hier ist dein Konstruktorraum. Wenn du etwas festlegen willst oder so, dann hier zwischen den funktionen.
    
        //Hier die beispiele für Private eigenschaft und methode. sie werden einfach so in diesem namespace deklariert
        function privateMethode() {}
        var privateEigenschaft = 0;
    
        //Hier nun die deklaration für public eigenschaften und methoden. der einzige unterschied ist eig ein this.
        this.publicEigenschaft = 4;
        this.publicMethode = function() {
            privateMethode();
        }
    }
    
    var instanz = new myClass;
    myClass.publicMethode();


    An sich sollte man aus dem Code schon bissel erkennen. Die "Klasse" heißt myClass und wird als Funktion eingebaut. Die inneren Funktionen und Variablen ohne "this." werden als private angenommen, mit this. als public.
    Hintergrund hier sind Closures. Sie legen für einen Neuaufruf auch neue Funktionsobjekte an, das geschieht ganz automatisch. Die Privaten Methoden werden außerdem eig in Variablen gespeichert und als anonyme Funktionen deklariert, aber das siehst du ja.

    Ich hoffe das hilft. Wenn nicht gern nachfragen. Ich habs zwar schon lang nicht mehr gemacht aber so sollte es Korrekt sein.
    Liebe Grüße



    Okay danke, das funktioniert.

    Vllt kannst du mir auch noch sagen wie ich jetzt eine Funktion eines Objektes mehrere male hintereinander aufrufen kann, mit einer Pause zwischen jedem Aufruf.

    normaler weise geht das mit
    window.setInterval("Test()", 1000);


    aber seit der umstellung tut sich nichts mehr =(
    Ich habe es dann so versucht:
    window.setInterval("Objekt[0].Test()", 1000);



    Beitrag zuletzt geändert: 3.4.2011 18:10:42 von marius71
  5. Das Problem, welches viele Leute mit JS haben ist, genau das was du jetzt auch hast…
    Schreibe eine Methode, welche dir das Problem abnimmt, Beispiel gefällig?
    var ProgressBar = function(id){
        var count = 0;
        var max  = 100;
        var bar = document.getElementById(id)
        bar.innerHTML = count+' %';
        this.fill = function(){
            count++;
            bar.innerHTML = count+' %';
            if(count >= max)
                this.clearInterval();
        }
    };
    ProgressBar.prototype.setInterval = function(fn, timesteps, args){
        if(!this[fn]) throw new Error("The Method "+fn+" does not exists in PrgressBar");
        var _this = this;
        var runInterval = function(){
            _this[fn](args);
        }
        this.intervalPointer = window.setInterval(runInterval, timesteps);
    };
    ProgressBar.prototype.clearInterval = function(){
        if(this.intervalPointer)
            window.clearInterval(this.intervalPointer);
    };
    var ladebalken1 = new ProgressBar('ladebalken1');
    var ladebalken2 = new ProgressBar('ladebalken2');
    
    ladebalken1.setInterval('fill', 1000);
    Es soll nur ein Denkanstoß sein, auch wenn es bereits funktionsfähig ist.

    Mit freundlichen Grüßen
  6. Autor dieses Themas

    marius71

    marius71 hat kostenlosen Webspace.

    Danke, super Antwort!

    Ich werde nun meine Ladenbalken wieder auf setInterval umstellen, so wie du es geschrieben hast.

    Was auch funktioniert ist folgendes:

    var callback = function() {
    		if (LadebalkenObjekt[ObjektID].test()==1){
    			setTimeout(callback,1000); 
    		}
    	}


    Und innerhalb der Funktion LadebalkenObjekt[ObjektID].test() wird dann eine 0 zurück gegeben, sobald der Balken voll ist und die funktion callback() nicht mehr aufgerufen werden soll

  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!