当一个属性改变时更新另一个属性?

时间:2019-10-25 12:12:58

标签: javascript oop properties

我想在我的javascript对象上创建一个依赖属性。 我在代码片段中有一个对象。我想更新isPawn属性;当isNew属性更改时。

有没有办法自动执行类似的操作?

if(isNew){
   isPawn = true;
}

但是它们不必相同。当isPawn为'true'时,isNew可以为'false'

我的对象:

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

3 个答案:

答案 0 :(得分:1)

是的,您可以使用设置器来完成此操作,下面是一个示例:

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);

#isNewprivate field,在这种情况下,我使用它来跟踪isNew的值(getter应该返回什么)。

以下是使用函数而不是类的示例:

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);

答案 1 :(得分:0)

创建一个类并根据需要实例化

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);

答案 2 :(得分:0)

您可以为此属性设置默认值,如下所示:

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);