Ошибка в коде в том, что при вызове
filter.update.country()
this
является объект
update
, а не
filter
.
JS код, идентичный коду на Java:
class Filter {
static sex = null;
static player = null;
static country = null;
static updateSex() {
Filter.sex = document.querySelector("#sex").value;
}
static updatePlayer() {
Filter.player = document.querySelector("#player").value;
}
static updateCountry() {
Filter.country = document.querySelector("#country").value;
}
}
Filter.updatePlayer();
console.log(Filter.player);
или
class Filter {
constructor() {
this.sex = null;
this.player = null;
this.country = null;
}
updateSex() {
this.sex = document.querySelector("#sex").value;
}
updatePlayer() {
this.player = document.querySelector("#player").value;
}
updateCountry() {
this.country = document.querySelector("#country").value;
}
}
const filter = new Filter();
filter.updateCountry();
console.log(filter.country);
Ну и рабочий аналог "кода" из вопроса:
class Filter {
fields = {
country: null,
}
update = {
caller: this,
country() {
this.caller.fields.country = "123";
}
}
}
const filter = new Filter();
filter.update.country();
console.log(filter.fields.country);