Да, вы можете сделать это с помощью установщика, вот пример:
class Soldier {
#isNew = false;
constructor(id,name) {
this.id = id;
this.name = name;
this.isPawn = false;
}
set isNew(val) {
this.#isNew = val;
this.isPawn = val;
}
get isNew() {
return this.#isNew;
}
}
const soldier = new Soldier();
soldier.isNew = true;
console.log('isNew:', soldier.isNew, 'isPawn', soldier.isPawn);
soldier.isNew = false;
console.log('isNew:', soldier.isNew, 'isPawn', soldier.isPawn);
soldier.isPawn = true;
console.log('isNew:', soldier.isNew, 'isPawn', soldier.isPawn);
#isNew
является приватным полем , в этом случае я использую его для отслеживания того, каким должно быть значение isNew
(что должен вернуть получатель).
Вот пример использования функции вместо класса:
var Soldier = function(id, name) {
this.id = id;
this.name = name;
this.isPawn = false;
this.isNewPriv = false;
Object.defineProperty(this, 'isNew', {
set: function(val) {
this.isNewPriv = val;
this.isPawn = val;
},
get: function() {
return this.isNewPriv
}
});
}
var soldier = new Soldier(1, 'none');
soldier.isNew = true;
console.log("isNew:", soldier.isNew, "isPawn:", soldier.isPawn);
soldier.isNew = false;
console.log("isNew:", soldier.isNew, "isPawn:", soldier.isPawn);
soldier.isPawn = true;
console.log("isNew:", soldier.isNew, "isPawn:", soldier.isPawn);