les - onmouseover javascript exemple




Accéder aux variables membres de classes dans un gestionnaire d'événements en Javascript (2)

Étant donné que this change dans un contexte d'événement (généralement vers le global ), vous devez stocker une référence à vous en dehors de l'événement:

function Map() {
    this.x = 0;
    this.y = 0;
    var _self = this;
    $("body").mousemove( function(event) {
        _self.x = event.pageX;     // Is now able to access Map's member variable "x"
        _self.y = event.pageY;     // Is now able to access Map's member variable "y"
    });
}

J'ai une question rapide concernant la bonne façon d'accéder aux variables membres de la classe Javascript à l'intérieur d'un gestionnaire d'événements que la classe utilise. Par exemple:

function Map() {
    this.x = 0;
    this.y = 0;

    $("body").mousemove( function(event) {
        this.x = event.pageX;     // Is not able to access Map's member variable "x"
        this.y = event.pageY;     // Is not able to access Map's member variable "y"
    });
}

Plutôt que de modifier la variable membre de la classe "Map", le "this.x" dans le gestionnaire d'événements tente d'affecter la variable membre "x" de l'élément qui a déclenché l'événement. Quelle est la bonne façon d'accéder aux variables membres de la classe "Map" à partir des gestionnaires d'événements?

Toute aide serait grandement appréciée - j'ai en quelque sorte gratté la tête à celui-ci.

À la vôtre, Charlie


La solution que Matt lui a donnée est probablement la voie à suivre.

Juste pensé que je ferais remarquer que vous pouvez transmettre des données via l'objet d'événement comme ceci:

function Map() {
    this.x = 0;
    this.y = 0;

// Pass object with data-------------v
    $("body").bind('mousemove', {ths: this}, function(event) {
            // access this via event.data
        event.data.ths.x = event.pageX;
        event.data.ths.y = event.pageY;     
    });
}

Ceci est juste pour l'info. Ce n'est vraiment pas une application pratique. La référence de Matt à une variable locale a plus de sens.





event-handling