Struppi: onclick verhalten und foo has no properties

Beitrag lesen

....
parent ist überflüssig, da in this.goal() this gleich dem Action objekt ist.
Aber ich bin doch wiederum innerhalb von dieser anonymen Funktion und da (dachte ich zumindest) ist this die addGoal() Mehtode?

Ich hab mir das ganez mal nachgebaut.
Du brauchst oparent, weil du innerhalb der closure Funktion eine callbackfunktion aufrufst.

So wäre es ausreichend:
this.addGoal = function (team) {
        var parent = this;
        var getResponse = function(code, response) {
            if(code == 1) {
                parent.responseAction(response);
            }
            else parent.responseAction.wrong(response);
        }
var send = new GameClient('addGoal&spielID='+ this.id + '&team='+team, getResponse);
}

Aber das ist natürlich sehr tricky. Ein closure, das einem Objekt als Callbackfunktion übergeben wird, um innerhalb des Objektes Funktionen auszuführen. Das ist notwendig, da eine Funktionsreferenz ihr Objekt verliert.

angenommen es gäbe:

Action.prototype.callback = function() {...}

und du übergibst hier:
function GameClient(url, callback) {

..
    callback(1, 'test text');
}
this.callback
würde zwar die Funktion aufgerufen, aber in der Funktion wäre this = window.

Ansonsten bist du natürlich sehr verstrickt in die "hohe Kunst der JS OOP" Programmierung.
Ja ich weiß, da ich das aber lernen möchte muss ich da wohl durch. Bisher habe ich schon viel erfahren, nur leider habe ich online noch nichts gefunden wo ich über solche Sachen nachlesen kann und versuche mich druch probieren und fragen irgendwie fortzubewegen. Vielleicht hast du einen Lesetipp?

Es gibt ein paar Seiten, aber immer nur irgendwelche Tipps. also z.B. über closure oder die speziellen Vererbungstechniken von JS.

Ich kram mal....

http://jibbering.com/faq/faq_notes/closures.html
http://crockford.com/javascript/inheritance.html (und alles was dort an Seiten noch existiert)

Und stehst damit auch zwischen vielen Fallstricken. Welche Funktion letztlich Action in addBehaviour() hat ist nicht ganz klar.
Naja eigentlich schon, es ist eine Funktionalität die bei onclick auf einen Button zur Verfügung gestellt wird. Wobei es halt ungefähr bis zu 300 mal 15 = 4500 Buttons auf einer Seite geben kann und die Seite den ganzen Tag offen gehalten wird und somit auch die Daten. Deshalb ist das ganze wohl am sinvollsten mit oop zu lösen, oder?

Jein, der Button stößt eine Funktion an. Wozu gehört der Button, also zu welchem abstrakten Objekt in deiner Anwendung?
Ist es nur ein Button, der einer globalen Anwendung im Falle onclick Daten übergibt und etwas anstößt oder soll er noch etwas anderes machen?

Und ich vermute dass du auch noch die Referenz auf den Button brauchst um z.b. den Wert bei dem onclick event zu ermitteln .
Nein das versuche ich ja damit zu umgehen, dass ich die spielID übergebe und eine konkrete funktion mit dem Button in verbindung bringe. Es gibt nämlich auch noch in einer reihe (tr) mehrere Buttons mit geichen werten die aber unterschiedliche funktionen ausführen. Ich mache mal hier einen screenshot rein, damit man sich das besser vorstellen kann:

...

Naja, dann ist z.b. eine Reihe ein Objekt mit fünf (bzw. x ) verschiedenen Buttons, die jeweils unterschiedliche Dinge in diesem Objekt anstossen, aber evtl. auch miteinander in Verbindung stehen.

Sieht auf jeden Fall interessant aus.

Struppi.