Lipsește _this definiție

voturi
1

Am o funcție definită într-un obiect de genul:

    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);
                }
            }
        }));
    }

Compilatorul typescript ia asta și produce acest lucru:

        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);
                    }
                }
            }));
        };

Notă această linie în js:

_this.errorChecker(data, function (data)

Compilatorul a observat în mod corect utilizarea mea a => operator și a concluzionat că thisdactilografiat meu original ar trebui să se refere la obiectul părinte și nu ceea ce thisse întâmplă să fie atunci când apel invers de succes este , de fapt numit. Dar, pentru un motiv oarecare compilatorul a uitat să includă linia magică:

var _this = this;

La începutul funcției. Este un bug? Sau este acest lucru prin design? În cazul în care pur și simplu ignorat _this / chestia asta cu totul, aș spune doar că fac greșit, dar merge la jumătatea aici ceea ce mă face să cred că ceva este greșit.

Actualizare : ciudat acest lucru pare a fi o problemă cu compilator în Visual Studio, dacă copiați același cod în terenul de joacă funcționează conform așteptărilor.

Întrebat 08/10/2012 la 18:33
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Acest lucru arata ca un bug. Ar trebui să deschidă un element de lucru pentru a urmări acest lucru.

Publicat 08/10/2012 la 18:51
sursa de către utilizator

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