By měla vytvořit proměnnou s názvem _this konflikt s tím?

hlasů
2

Jedná se o velmi nepřirozený příklad, ale předpokládejme, že vytvoříme proměnnou _thisněkde v funkce třídy.

class Person {
  constructor (public name : string) {}
  changeName(name) {
    var _this = {};
    (() => {
      this.name = name;
    })();
  }
}

To nebude fungovat, jak se očekávalo, když říkáme changeNamefunkce, protože příslušná část zkompilovaný kód vypadá takto:

var _this = this;
var _this = {};
(function () {
  _this.name = name;
})();

To je špatná Javascript: máme dvě vardeklarace přepisu navzájem. _thisVytvořený kompilátorem je přepsání mou _this.

Co se týče vidím, toto chování není v souladu s strojopisu spec.

Proč by měli být v rozporu? Nemůže kompilátor zjistit, zda jsem vytvořil proměnnou s názvem _thisa název automaticky generované jeden něco jiného, chtěla _this2, aby mé proměnných a ty kompilátoru generované z pošlapávání navzájem?

Položena 03/10/2012 v 15:08
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
7

Kompilátor automaticky vytvoří _thisjako odkaz na thisk usnadnění uzavírání, která bude vytvořena pomocí syntaxe lambda. Jsem si jistá, že jsem si přečetl to ve specifikaci strojopisu někde, ale já bych se shodují, že překladač by měl emitovat chybu v tomto případě.

Nemám rád myšlenku kompilátoru měnící se, jak to vydává javascript, protože to je v rozporu s uvedeným cílem generovat „idiomatický“ (a tedy předvídatelné) Javascript.

Odpovězeno 03/10/2012 v 15:27
zdroj uživatelem

hlasů
0

Není to, co byste nazvali vyhrazený proměnnou? Myslím, že byste se deklarovat proměnnou s názvem „to“ nebo „dokumentem“ jeden.

Tak dlouho, jak MS je jasné, co rezervované proměnné, nemyslím si, že je tu velký problém. Mohly by snad zlepšení kompilátor k výstupu varování ačkoli.

Odpovězeno 03/10/2012 v 15:27
zdroj uživatelem

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