Mocht het creëren van een variabele met de naam _this conflict met dit?

stemmen
2

Dit is een zeer gekunsteld voorbeeld, maar laten we aannemen dat we een variabele _thisergens in een klasse-functie.

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

Dit zal niet als werk verwacht wanneer noemen we de changeNamefunctie, omdat het desbetreffende deel van de gecompileerde code ziet er als volgt uit:

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

Dit is slecht Javascript: we hebben twee varverklaringen elkaar overschrijven. De _thisdoor de compiler wordt overschreven door mijn _this.

Voor zover ik kan zien, is dit gedrag niet in de typoscript spec.

Waarom zouden ze in strijd? Kan niet de compiler detecteren als ik een variabele met de naam hebt gemaakt _thisen anders de naam van de automatisch gegenereerde één iets, graag _this2mijn variabelen en de-compiler gegenereerde degenen van vertrappen elkaar te houden?

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


2 antwoorden

stemmen
7

De compiler automatisch _thisals verwijzing naar thisde sluiting die wordt gemaakt met behulp van lambda syntax vergemakkelijken. Ik ben vrij zeker dat ik dit las in het typoscript specificatie ergens, maar ik zou het ermee eens dat de compiler een fout moet uitstralen in dit geval.

Ik hou niet van het idee van de compiler variërende hoe het uitzendt javascript, omdat dit in strijd is met het gestelde doel van het genereren van "idiomatisch" (en dus voorspelbaar) javascript.

antwoordde op 03/10/2012 om 15:27
bron van user

stemmen
0

Is het niet wat je een gereserveerde variabele zou noemen? Ik denk dat je niet zou een variabele genaamd "dit" of "document" ofwel verklaren.

Zolang MS is duidelijk wat de gereserveerde variabelen zijn, denk ik niet dat er een groot probleem. Ze kan misschien het verbeteren van de compiler om de productie waarschuwingen dat wel.

antwoordde op 03/10/2012 om 15:27
bron van user

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