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?
扔个三星炸死你
扔个三星炸死你 2017-07-05 10:55:22
0
2
820

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 ?

扔个三星炸死你
扔个三星炸死你

répondre à tous(2)
大家讲道理

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一样
習慣沉默

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal