Wie greife ich in einem Rückruf auf das richtige "this" zu?

Ich habe eine Konstruktorfunktion, die einen Ereignishandler registriert:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', function () {
        alert(this.data);
    });
}

// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};

// called as
var obj = new MyConstructor('foo', transport);

Ich kann jedoch nicht auf die zugreifendata Eigenschaft des erstellten Objekts innerhalb des Rückrufs. Es sieht aus wiethis bezieht sich nicht auf das erstellte Objekt, sondern auf ein anderes.

Ich habe auch versucht, eine Objektmethode anstelle einer anonymen Funktion zu verwenden:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', this.alert);
}

MyConstructor.prototype.alert = function() {
    alert(this.name);
};

aber es zeigt die gleichen Probleme.

Wie kann ich auf das richtige Objekt zugreifen?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage