Variablenzugiff zwischen Objekten

InioOne

Grünschnabel
Hi,

ich habe 2 js-Klassen und möchte in einer dieser Klassen, eine Instanz der 2. Klasse erstellen und anschließend auf deren Member zugreifen. Allerdings bekomme ich beim entsprechendem Aufruf nicht den von mir erwarteten Wert der 2. Instanz zurück sondern ein 'undefined' (Zeile 16).

PHP:
var First = Class.create();
First.prototype = {
    initialize: function(elementId) {
        this.second = new Second(elementId); // Instanz #2 erzeugen
        $(elementId).onclick = this.second.showSecondValue; // Methode von #2 aufrufen
    }
}

var Second = Class.create();
Second.prototype = {
    initialize: function(_value) {
        this.fooBar = "second" + _value; // hier eine Variable für #2 erzeugen
    },

    showSecondValue: function() {
        alert(this.fooBar); // die Variable von #2 ausgeben
    }
}

Ich hoffe der Code ist übersichtlich genug, um das Problem zu verstehen :), weil ich versteh es nicht :).
Wäre jedenfalls schön wenn jemand eine Lösung zur Hand hat, wie ich nun auf die Variablen den 2. Instanz zugreifen kann.

thx
inio
 
Hi,

sieht so aus, als würde der Gültigkeitsbereich von this beim Aufruf des onclick-Events falsch sein. Der this-Zeiger referenziert beim Aufruf das Objekt, das den Event ausslöst, nicht wie erwartet die erste Klasse.

Als Lösung könntest du den this-Zeiger in einer Variablen "closuren" (mehr dazu hier) und den Event über eine anonyme Funktion aufrufen.

Beispiel:
Code:
var First = Class.create();
First.prototype = {
  initialize: function(elementId) {
    this.second = new Second(elementId); // Instanz #2 erzeugen
    // this-Zeiger "closuren"
    var objThis = this;
    // Event über anonyme Funktion zuweisen
    $(elementId).onclick = function(){objThis.second.showSecondValue();}; // Methode von #2 aufrufen
  }
}
Ciao
Quaese
 

Neue Beiträge

Zurück