Έχω μια συνάρτηση ορισμένη σε ένα αντικείμενο, όπως αυτό:
connect(callback?: (connected: bool) => void) {
$.ajax(this.url + /connect, $.extend(true, {}, this.ajaxSettings, {
success: (data) => {
this.errorChecker(data, (data) => {
if (callback != null) {
callback(data);
}
});
},
timeout: this.timeout,
error: () => {
if (callback != null) {
callback(false);
}
}
}));
}
Ο compiler γραφομηχανή παίρνει αυτό και παράγει αυτό:
VAS.prototype.connect = function (callback) {
$.ajax(this.url + /connect, $.extend(true, {
}, this.ajaxSettings, {
success: function (data) {
_this.errorChecker(data, function (data) {
if(callback != null) {
callback(data);
}
});
},
timeout: this.timeout,
error: function () {
if(callback != null) {
callback(false);
}
}
}));
};
Σημειώστε αυτή τη γραμμή στα JS:
_this.errorChecker(data, function (data)
Ο compiler έχει παρατηρήσει σωστά μου χρήση του => χειριστή και κατέληξε στο συμπέρασμα ότι thisστην αρχική μου γραφομηχανή θα πρέπει να αναφέρεται το γονικό αντικείμενο και όχι ό, τι thisσυμβαίνει να είναι, όταν η επιστροφή κλήσης επιτυχία είναι στην πραγματικότητα ονομάζεται. Αλλά, για κάποιο λόγο ο compiler έχει ξεχάσει να συμπεριλάβει τη μαγεία γραμμή:
var _this = this;
Κατά την έναρξη της λειτουργίας. Είναι αυτό ένα bug; Ή είναι αυτό με το σχεδιασμό; Αν απλά αγνόησε τις _this / αυτό το πράγμα εντελώς, θα ήθελα απλώς να πω ότι κάνω λάθος, αλλά θα το μισό δρόμο εδώ που με κάνει να σκεφτώ κάτι δεν πάει καλά.
Ενημέρωση : παραδόξως αυτό φαίνεται να είναι ένα πρόβλημα με τον compiler σε Visual Studio, αν μπορώ να αντιγράψω τον ίδιο κωδικό στην παιδική χαρά λειτουργεί όπως αναμένεται.













