Θα πρέπει να δημιουργεί μια μεταβλητή με όνομα _this σύγκρουση με αυτό;

ψήφοι
2

Αυτό είναι ένα πολύ σκηνοθετημένη παράδειγμα, αλλά ας υποθέσουμε ότι έχουμε δημιουργήσει μια μεταβλητή _thisκάπου σε μια συνάρτηση τάξη.

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

Αυτό δεν θα λειτουργήσει όπως αναμένεται, όταν καλούμε τη changeNameσυνάρτηση, διότι το σχετικό τμήμα του μεταγλωττισμένο κώδικα μοιάζει με αυτό:

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

Αυτό είναι κακό Javascript: έχουμε δύο varδηλώσεις αντικατάσταση ο ένας τον άλλον. Ο _thisδημιουργήθηκε από τον compiler είναι να αντικατασταθούν από μου _this.

Σε ό, τι μπορώ να δω, αυτή η συμπεριφορά δεν καθορίζεται στο spec γραφομηχανή.

Γιατί θα πρέπει να έρχονται σε σύγκρουση; Δεν είναι δυνατή η compiler να ανιχνεύσει αν έχω δημιουργήσει μια μεταβλητή με το όνομα _thisκαι το όνομα του δημιουργείται αυτόματα ένα κάτι άλλο, ήθελε _this2να κρατήσει μεταβλητών μου και αυτά που compiler που δημιουργείται από την καταπάτηση κάθε άλλο;

Δημοσιεύθηκε 03/10/2012 στις 15:08
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
7

Ο compiler θα δημιουργήσει αυτόματα _thisως αναφορά για thisνα διευκολύνουν την παύση λειτουργίας που θα δημιουργηθεί με τη χρήση σύνταξη λάμδα. Είμαι απόλυτα βέβαιος ότι διάβασα αυτό στις προδιαγραφές γραφομηχανή κάπου, αλλά θα ήθελα να συμφωνούν ότι ο μεταφραστής θα πρέπει να εκπέμπουν ένα λάθος σε αυτήν την περίπτωση.

Δεν μου αρέσει η ιδέα του compiler διαφορετικό τρόπο με τον οποίο εκπέμπει javascript καθώς αυτό έρχεται σε αντίθεση με τον δεδηλωμένο στόχο της δημιουργίας «ιδιωματισμούς» (και ως εκ τούτου προβλέψιμη) javascript.

Απαντήθηκε 03/10/2012 στις 15:27
πηγή χρήστη

ψήφοι
0

Δεν είναι αυτό που θα αποκαλούσα μια διατηρούνται μεταβλητή; Υποθέτω ότι δεν θα δηλώσετε μια μεταβλητή που ονομάζεται «αυτό» ή «έγγραφο», είτε.

Όσο MS είναι σαφής ως προς το τι είναι οι δεσμευμένες μεταβλητές, δεν νομίζω ότι υπάρχει ένα μεγάλο πρόβλημα. Θα μπορούσε ίσως να βελτιώσει τον compiler σε προειδοποιήσεις εξόδου όμως.

Απαντήθηκε 03/10/2012 στις 15:27
πηγή χρήστη

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