¿Cómo acceder al 'este' correcto dentro de una devolución de llamada?

Tengo una función constructora que registra un controlador de eventos:

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);

Sin embargo, no puedo acceder aldata Propiedad del objeto creado dentro de la devolución de llamada. Parece quethis no se refiere al objeto que fue creado sino a otro.

También intenté usar un método de objeto en lugar de una función anónima:

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

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

Pero exhibe los mismos problemas.

¿Cómo puedo acceder al objeto correcto?

Respuestas a la pregunta(10)

Su respuesta a la pregunta