Dovrebbe creare una variabile di nome _this conflitto con questo?

voti
2

Questo è un esempio molto artificiosa, ma supponiamo creiamo una variabile _thisda qualche parte in una funzione di classe.

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

Questo non funziona come previsto quando si chiama la changeNamefunzione di perché la parte rilevante del codice compilato è simile al seguente:

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

Questo è male Javascript: abbiamo due vardichiarazioni sovrascrittura vicenda. Il _thiscreato dal compilatore viene sovrascritto dal mio _this.

Per quanto posso vedere, questo comportamento non è specificato nelle specifiche dattiloscritto.

Perché dovrebbero entrare in conflitto? Non può il compilatore rilevare se ho creato una variabile chiamata _thise il nome del generata automaticamente una qualcos'altro, come _this2tenere le mie variabili e quelli generati dal compilatore da calpestare l'altro?

È pubblicato 03/10/2012 alle 15:08
fonte dall'utente
In altre lingue...                            


2 risposte

voti
7

Il compilatore crea automaticamente _thiscome riferimento thisper agevolare la chiusura che verrà creato utilizzando la sintassi lambda. Sono abbastanza sicuro che ho letto questo nella specifica dattiloscritto da qualche parte, ma ero d'accordo che il compilatore dovrebbe emettere un errore in questo caso.

Non mi piace l'idea del compilatore variabile come emette javascript come questo è in conflitto con l'obiettivo dichiarato di generare "idiomatica" (e quindi prevedibile) javascript.

Risposto il 03/10/2012 a 15:27
fonte dall'utente

voti
0

Non è quello che si chiama una variabile riservato? Credo che non sarebbe dichiarare una variabile chiamata "questo" o "documento" sia.

Finché MS è chiaro su ciò che le variabili sono riservate, non credo che ci sia un problema importante. Potrebbero forse migliorare la compilatore di avvertimenti di uscita però.

Risposto il 03/10/2012 a 15:27
fonte dall'utente

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