У TypeScript, якщо ви визначаєте функцію за допомогою () => {...}
, the this
змінна буде посилатися на екземпляр навколишнього класу. Але якщо використовувати function () {...}
, the this
змінна матиме своє старе тлумачення JavaScript.
Чи є спосіб отримати доступ до обох цих this
змінні у функції TypeScript?
Мені періодично потрібно це під час використання JQuery в TypeScript:
class X {
private v : string;
constructor() {
$(".xyz").on("change", function() {
this.v = $(this).prop("value"); // Two different this"s
})
}
}
У центральному рядку в коді перший this
повинен посилатися на об'єкт класу X, тоді як другий this
має посилатися на об'єкт JQuery, який ініціював подію.
Відповіді:
5 за відповідь № 1В change
обробник подій this
буде посилатися на .xyz
елемент, який підняв лише подію. Якщо ви хочете посилання на вміст X
клас, тоді вам потрібно зберегти змінну, що містить цю посилання, наприклад:
class X {
private v : string;
constructor() {
var _x = this;
$(".xyz").on("change", function() {
_x.v = $(this).prop("value");
})
}
}