javascript - Dalam fungsi mengikat acara, ini ialah objek yang terikat pada acara Bagaimana saya boleh merujuk objek yang diinstakan dalam fungsi?
扔个三星炸死你
扔个三星炸死你 2017-07-05 10:55:22
0
2
813

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?

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

membalas semua(2)
大家讲道理

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

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan