Należy tworząc zmienną o nazwie _this konflikt z tym?

głosy
2

Jest to bardzo wymyślony przykład, ale załóżmy, tworzymy zmienną _thisgdzieś w funkcji klasy.

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

To nie będzie działać zgodnie z oczekiwaniami, gdy wywołujemy changeNamefunkcję, ponieważ odpowiednia część skompilowany kod wygląda następująco:

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

To jest złe Javascript: mamy dwie vardeklaracje nadpisywania siebie. _thisStworzony przez kompilator jest zastępowane przez mojego _this.

O ile widzę, to zachowanie nie jest określony w specyfikacji maszynopis.

Dlatego powinny one sprzeczne? Nie może wykryć, czy kompilator I stworzyliśmy zmienną o nazwie _thisi nazwij automatycznie wygenerowany coś innego, jak _this2zachować moje zmienne i te kompilatora generowane z depcząc się nawzajem?

Utwórz 03/10/2012 o 15:08
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
7

Kompilator automatycznie tworzy _thisjako odniesienie thisw celu ułatwienia zamknięcia, który zostanie utworzony za pomocą składni lambda. Jestem pewien, że to przeczytać w opisie maszynopis gdzieś, ale zgodziłbym się, że kompilator powinien emitują błąd w tej sprawie.

Nie podoba mi się pomysł, jak kompilator różnym emituje JavaScript jak jest to sprzeczne z deklarowanym celem tworzenia „idiomatyczne” (a zatem przewidywalne) JavaScript.

Odpowiedział 03/10/2012 o 15:27
źródło użytkownik

głosy
0

Nie jest to, co można nazwać zastrzeżone zmienną? Chyba nie byłoby zadeklarować zmienną o nazwie „to” lub „dokument” albo.

Dopóki MS jest jasne, co zmienne są zarezerwowane, nie sądzę, że jest to poważny problem. Mogły być może poprawić kompilator ostrzeżenia wyjściowych chociaż.

Odpowiedział 03/10/2012 o 15:27
źródło użytkownik

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