În cazul în care crearea unei variabile _this conflict cu asta?

voturi
2

Acesta este un exemplu foarte contrived, dar să presupunem că vom crea o variabilă _thisundeva într - o funcție de clasă.

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

Acest lucru nu va funcționa cum era de așteptat , atunci când vom apela changeNamefuncția , deoarece partea relevantă a codului compilat arata ca acest lucru:

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

Acest lucru este rău Javascript: avem două vardeclarații suprascriere reciproc. _thisCreat de compilator este suprascris meu _this.

Din câte văd eu, acest comportament nu este specificat în spec dactilografiate.

De ce ar intra în conflict? Nu se poate compilatorul detecta dacă am creat o variabilă cu numele _thisși numele generat automat un altceva, ca _this2să păstreze variabilele mele și cele generate de compilator de la călcat în picioare pe unul de altul?

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


2 răspunsuri

voturi
7

Compilatorul va crea în mod automat _thisca referință pentru thisa facilita închiderea care va fi creat prin utilizarea sintaxa lambda. Sunt destul de sigur că am citit acest lucru în caietul de sarcini typescript undeva, dar aș fi de acord că compilatorul ar trebui să emită o eroare în acest caz.

Nu-mi place ideea de compilator variind modul în care emite javascript ca acest lucru intră în conflict cu obiectivul declarat de a genera „idiomatic“ (și, prin urmare, previzibil) JavaScript.

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

voturi
0

Nu este ceea ce ați numi o variabilă rezervată? Cred că nu ar declara o variabilă numită sau „document“ „acest“, fie.

Atâta timp cât SM este clar care variabilele sunt rezervate, nu cred că există o problemă majoră. Poate că ar putea îmbunătăți compilatorul la avertismente de ieșire, deși.

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

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