Sollte die Schaffung eines variablen _this Konflikt mit diesem Namen?

stimmen
2

Dies ist ein sehr konstruiertes Beispiel, aber nehmen wir an , wir eine Variable erstellen _thisirgendwo in einer Klasse - Funktion.

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

Dies wird nicht wie erwartet funktionieren , wenn wir den Aufruf changeNameFunktion , weil der betreffende Teil des kompilierten Code wie folgt aussieht:

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

Das ist schlecht Javascript: Wir haben zwei varErklärungen gegenseitig überschreiben. Der _thisvom Compiler erstellt wird durch meine überschrieben _this.

Soweit ich sehen kann, ist dieses Verhalten nicht in der Typoskript spec angegeben.

Warum sollten sie in Konflikt geraten? Kann nicht der Compiler erkennen , wenn ich eine Variable erstellt haben Namen _thisund das automatisch generierte ein etwas anderes nennen, wie _this2meine Variablen und die Compiler generierten diejenigen aufeinander aus Trampeln zu halten?

Veröffentlicht am 03/10/2012 um 15:08
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
7

Der Compiler wird automatisch erstellen _thisals Verweis auf thisden Verschluss zu erleichtern, die mit Lambda - Syntax erstellt wird. Ich bin mir ziemlich sicher , dass ich dies in der Typoskript Spezifikation irgendwo gelesen, aber ich würde zustimmen , dass der Compiler einen Fehler in diesem Fall emittieren soll.

Ich mag es nicht, die Idee des Compilers variiert, wie es Javascript emittiert, wie dies mit dem erklärten Ziel in Konflikt von „idiomatisches“ (und somit vorhersehbar) javascript zu erzeugen.

Beantwortet am 03/10/2012 um 15:27
quelle vom benutzer

stimmen
0

Ist es nicht, was Sie eine reservierte Variable nennen würde? Ich denke, man würde nicht eine Variable namens „dieses“ oder „Dokument“ entweder erklären.

Solange MS klar ist, was die reservierten Variablen sind, ich glaube nicht, dass es ein großes Problem ist. Sie könnten vielleicht wenn der Compiler Ausgabe Warnungen verbessern.

Beantwortet am 03/10/2012 um 15:27
quelle vom benutzer

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