Acest lucru dactilografiat săgeată definiții?

voturi
2

Am scris un astfel de obiect literal dactilografiat:

var object = {
    message: Say,
    say: () => {
        return this.message;
     }
};

Și am primit un astfel JavaScript generat:

var object = {
    message: Say,
    say: function () {
        return _this.message;
    }
};

În cazul în care nu exista o astfel linie înainte de declarația de retur:

 var _that = this;

ca eu sunt, folosind expresia funcției săgeată?

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


2 răspunsuri

voturi
2

=>este un pic de un pericol aici , deoarece, în mod critic, se leagă thisla anexând osciloscopuluithis . În generarea codului corect, var _this = this;linia merge deasupra obiectului literal și dumneavoastră sayfuncția pur și simplu se întoarce undefined.

Vrei doar vreodată să utilizați thisîntr - o =>expresie atunci când doriți de fapt să se refere la thisfaptul că ar fi prezent în domeniul de aplicare îngrădire. În acest caz particular, nu (doriți ca domeniul de aplicare interior this, adică însuși literal obiect).

Publicat 10/10/2012 la 00:25
sursa de către utilizator

voturi
2

Tu ești corect. Îi lipsește:

var _this = this;

Acest lucru este descoperit după eliberare (0,8) și este în prezent fixat pe ramura de dezvoltator.

Notă: De asemenea, cred că ai vrut să scrie

var object = {
    message: "Say",
    say: function () {
        return () => this.message;
    }
};

care va imprima Say când Efectiv rulat. A se vedea: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax

Publicat 10/10/2012 la 00:03
sursa de către utilizator

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