Ontbrekende _this definition

stemmen
1

Ik heb een functie gedefinieerd op een object als volgt:

    connect(callback?: (connected: bool) => void) {
        $.ajax(this.url + /connect, $.extend(true, {}, this.ajaxSettings, {
            success: (data) => {
                this.errorChecker(data, (data) => {
                    if (callback != null) {
                        callback(data);
                    }
                });
            },
            timeout: this.timeout,
            error: () => {
                if (callback != null) {
                    callback(false);
                }
            }
        }));
    }

De Typescript compiler neemt dat en produceert dit:

        VAS.prototype.connect = function (callback) {
            $.ajax(this.url + /connect, $.extend(true, {
            }, this.ajaxSettings, {
                success: function (data) {
                    _this.errorChecker(data, function (data) {
                        if(callback != null) {
                            callback(data);
                        }
                    });
                },
                timeout: this.timeout,
                error: function () {
                    if(callback != null) {
                        callback(false);
                    }
                }
            }));
        };

Let op deze lijn in de JS:

_this.errorChecker(data, function (data)

De compiler correct merkte mijn gebruik van de => operator en concludeerde dat thisin mijn oorspronkelijke Typescript moet verwijzen naar het bovenliggende object en niet wat thiser gebeurt te zijn wanneer het succes callback daadwerkelijk wordt genoemd. Maar, om wat voor reden de compiler is vergeten om de magie lijn zijn onder andere:

var _this = this;

Aan het begin van de functie. Is dit een bug? Of is dit door het ontwerp? Als het gewoon genegeerd de _this / dit ding helemaal, zou ik alleen maar zeggen dat ik doe het verkeerd, maar het gaat halverwege hier waardoor ik denk dat er iets mis is.

Update : vreemd dit lijkt een probleem met de compiler in Visual Studio, als ik dezelfde code in de kopie speelplaats het werkt zoals verwacht.

De vraag is gesteld op 08/10/2012 om 18:33
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Dit ziet eruit als een bug. Je moet een te openen werkitem om dit te volgen.

antwoordde op 08/10/2012 om 18:51
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more