Javascript OOP async?

holzmensch

Erfahrenes Mitglied
Hallo,

ich mache gerade meine Anfänge mit JS und versuche da etwas OOP reinzukriegen. Nun wird mein Script ganz komisch ausgewertet und ich weiß nicht, ob JS die Konsolelog Befehle erst nach dem Scriptdurchlauf auswertet oder nicht. Bin etwas verwirrt, hoffe einer kann etwas Licht ins Dunkle bringen. Mein Code:

Javascript:
                Karte = function(punkte){
                    this.punkte = punkte;
                    this.plusAlle = function(){
                        for(var i=0;i<this.punkte.length;i++){
                            this.punkte[i].plus();
                        }
                    }
                }
                Punkt = function(x,y){
                    this.x = x;
                    this.y = y;
                    this.plus = function(){
                        this.x++;
                        this.y++;
                    }
                }

                var punkte = new Array();
                punkte.push(new Punkt(1,1));
                punkte.push(new Punkt(3,5));
                var karte = new Karte(punkte);

                console.log(karte.punkte);
                karte.plusAlle();
                console.log(karte.punkte);

In der Konsole entnehme ich dann die Koordinaten der Punkte:
Code:
1. Ausgabe
(2|2) (4|6)

2. Ausgabe
(2|2) (4|6)

Ich verstehe das einfach nicht.
Grüße
 
Zuletzt bearbeitet von einem Moderator:
Die Konsolenausgabe arbeitet auf dem Live Objekt, es handelt sich also nicht um einen statischen Text. Und du gibst ja zwei mal das gleiche Objekt aus, also ist die Ausgabe natürlich identisch. Wenn du allerdings einen String ausgeben würdest, wären sie unterschiedlich.
 
Vielleicht so:
Javascript:
Karte = function(punkte){
    this.punkte = punkte;
    var self = this;
    this.plusAlle = function(){
        for(var i=0;i<this.punkte.length;i++){
            self.punkte[i].plus();
        }
    }
};

Punkt = function(x,y){
    this.x = x;
    this.y = y;
    var self = this;
    this.plus = function(){
        self.x++;
        self.y++;
    }
};
 
Was ist der unterschied mit self? Du speicherst ja nur this zwischen, was dann überhaupt kein Unterschied macht?

Mein eig. Problem stellte sich wie folgt dar:
Ich wollte eine 2d-Engine in JS aus Jucks und Tollerei erstellen und um das neue canvas-Element kennen zu lernen. In einem bestimmten Interval wird die Punkte bewegen und die bereits bestehenden Objekte verändert. Doch irgendwie klappt das nicht so recht, die Punkte werden falsch berechnet.
Erstelle ich aber in jedem Interval das Objekt neu, dann funktioniert das.

Etwas schwammig formuliert, doch vielleicht ist das Problem bekannt. Hoffe einer kann mir ein Tipp dazu geben.

Grüße
 
Dann probier mal das:

Javascript:
var Punkt = function(xVal, yVal){
	this.x = xVal;
	this.y = yVal;
	
	this.plus = function(){
		this.x++;
		this.y++;
		return this;
	};
	
	this.print = function()  {
		alert( "(" + this.x + "/" + this.y + ")" );
		return this;
	};
};

var punkt1 = new Punkt(1, 2);
punkt1.print().plus().print();
 

Neue Beiträge

Zurück