Maison  >  Questions et réponses  >  le corps du texte

javascript - Dans la fonction de liaison d'événement, il s'agit de l'objet lié à l'événement. Comment référencer l'objet instancié dans la fonction?

Utilisation du framework Leaflet, préparation à l'extension d'un objet.
Le code est le suivant :

var FxtMap = L.Class.extend({
        _preZoom: 4,
        _initZoom: 4,
        _queryScale: 7,
        _map:null,
        fxtData: null,
        options: {
            center: [31.2, 121.46715194],
            zoom: 4,
            crs: sh_crs,
            doubleClickZoom: false,
            zoomControl: false,
            attributionControl: false
        },

        initialize: function (id, mapOption) {
            if (mapOption) {
                L.Util.setOptions(this, mapOption);
            }

            this._map = L.map(id, this.options);

            m_tileLayer.addTo(this._map);
            m_oldView = this._map.getBounds();
            this._map.on({
                zoomstart: this.getPreZoom,
                zoomend: this.triggerLyrChange,
                viewreset: MapViewReset,
                moveend: MapDrag
            });
            this._map.invalidateSize("true");
        },
        getPreZoom: function (e) { 
            this._preZoom = this._map.getZoom();
        },
        triggerLyrChange: function () {
            if (this._map.getZoom() == this._queryScale && this._map.getZoom() > this._preZoom) {
                this._map.fire('jsonLyrType');
            }
            if (this.getZoom() == this._queryScale - 1 && this._map.getZoom() < this._preZoom) {
                this._map.fire('imgLyrType');
            }
        },
        
        ...
    })

getPreZoom et triggerLyrChange sont toutes deux des fonctions de liaison d'événements. Ceci dans la fonction est le _map de l'objet. Comment référencer correctement l'objet instancié dans cette fonction ? Puis-je utiliser uniquement FxtMap.prototype ?

扔个三星炸死你扔个三星炸死你2663 Il y a quelques jours753

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-07-05 10:57:22

    Pas de problème comme mentionné ci-dessus, utilisez simplement bind, ou vous pouvez simuler vous-même une liaison,

    Function.prototype.NewBind = function(obj){
        var _self = this;
        return function(){
            _self.call(obj,arguments);
        };
    };
    
    //调用的话
    getPreZoom: function (e) { 
       this._preZoom = this._map.getZoom();
    }.NewBind(this)
    //和bind一样

    répondre
    0
  • 習慣沉默

    習慣沉默2017-07-05 10:57:22

    Vous le découvrez vous-même, posez et répondez à vos propres questions.
    Il s'agit d'un problème typique avec la variable 'this' dans js. Dans la fonction de liaison d'événement, la fonction de rappel est finalement appelée par l'objet de liaison d'événement, donc 'this' pointe vers l'objet à ce moment-là. souhaitez modifier la fonction de rappel. La variable 'this' pointe vers l'objet d'instance et vous devez modifier manuellement le point de celui-ci via Function.prototype.bind.

    répondre
    0
  • Annulerrépondre