Обновить другое свойство, когда свойство изменяется? - PullRequest
0 голосов
/ 25 октября 2019

Я хочу создать зависимое свойство для моего объекта javascript. У меня есть объект, как в фрагменте кода. Я хочу обновить свойство isPawn;Когда свойство isNew изменяется.

Есть ли способ сделать что-то подобное, что автоматически;

if(isNew){
   isPawn = true;
}

Но они не должны быть одинаковыми. isNew может иметь значение «false», когда isPawn имеет значение «true»

Мой объект:

var Soldier = function (id,name) {
    this.id = id;
    this.name = name;
    this.isPawn = false;
    this.isNew = false;
}

Ответы [ 3 ]

1 голос
/ 25 октября 2019

Да, вы можете сделать это с помощью установщика, вот пример:

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);
0 голосов
/ 25 октября 2019

вы можете сделать значения по умолчанию для этих свойств, например так:

var Soldier = function (id,name,isPawn = false,isNew = false) {
    this.id = id;
    this.name = name;
    this.isPawn = isPawn;
    this.isNew = isNew;
}

, и если вы хотите изменить там значения на любой объект для вас, просто сделайте так:

var newSolider = new Solider(1,"foo",false,true);
0 голосов
/ 25 октября 2019

Создайте класс и создайте экземпляр по мере необходимости

class Soldier {
  constructor(id, name, isNew) {
    this.id = id;
    this.name = name;
    this.isPawn = isNew? true : {something : "whaterverElse"};
    this.isNew = isNew;
  }
  
  DoSomething(){
    this.isNew = false;
  }
  
}

var soldier = new Soldier(1, 'Tim', true);

console.log(soldier);

function somethingElseHappened(){
  soldier.DoSomething();
}

somethingElseHappened();

console.log(soldier);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...