Rumah  >  Soal Jawab  >  teks badan

javascript - Dalam fungsi mengikat acara, ini ialah objek yang terikat pada acara Bagaimana saya boleh merujuk objek yang diinstakan dalam fungsi?

Menggunakan rangka kerja Risalah, bersedia untuk memanjangkan objek.
Kod adalah seperti berikut:

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 dan triggerLyrChange adalah kedua-dua fungsi mengikat peristiwa Ini dalam fungsi ini ialah _map bagi objek yang dirujuk dengan betul dalam fungsi ini. Bolehkah saya hanya menggunakan FxtMap.prototype?

扔个三星炸死你扔个三星炸死你2663 hari yang lalu751

membalas semua(2)saya akan balas

  • 大家讲道理

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

    Tiada masalah seperti yang dinyatakan di atas, hanya gunakan bind, atau anda boleh mensimulasikan bind sendiri,

    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一样

    balas
    0
  • 習慣沉默

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

    Anda fikirkan sendiri, tanya dan jawab soalan anda sendiri.
    Ini adalah masalah biasa dengan pembolehubah 'ini' dalam js Dalam fungsi mengikat acara, fungsi panggil balik akhirnya dipanggil oleh objek mengikat acara, jadi 'ini' pada masa ini menunjuk ke objek pada masa ini mahu menukar fungsi panggil balik Pembolehubah 'ini' menghala ke objek contoh, dan anda perlu menukar titik ini secara manual melalui Function.prototype.bind.

    balas
    0
  • Batalbalas