Определение свойства объекта JavaScript в терминах другого - PullRequest
2 голосов
/ 11 декабря 2019

Я хочу определить одно свойство объекта в терминах другого, например:

let obj = {
  prop1: some value,
  prop2: some expression in terms of prop1 (e.g. prop1 * 2)
}

Поэтому, когда бы я ни ссылался на prop2 в моем коде, то выражение, которое я инициализировал, было оценено. Возможно ли это?

Ответы [ 2 ]

1 голос
/ 11 декабря 2019

Вы можете сделать prop2 значением function, которое выбирает значение prop1, выполняет некоторую логику и возвращает результат. Таким образом (если хотите) вы даже можете получить вывод prop2, чтобы быть актуальным с изменениями в prop1.

Пример: (запустите его ниже)

let obj = {
  prop1: 45,
  prop2 : function() {
    return this.prop1 * 3;
  }
};



console.log( obj.prop2() );
1 голос
/ 11 декабря 2019

Вы можете сделать это с помощью свойства accessor с функцией getter :

let obj = {
  prop1: 21,
  get prop2() {
    return this.prop1 * 2;
  }
};

console.log(obj.prop1); // 21
console.log(obj.prop2); // 42

Если хотите, вы также можете определить для него setter :

let obj = {
  prop1: 21,
  get prop2() {
    return this.prop1 * 2;
  },
  set prop2(value) {
    this.prop1 = value / 2;
  }
};

console.log(obj.prop1); // 21
console.log(obj.prop2); // 42

obj.prop2 = 8;
console.log(obj.prop1); // 4
console.log(obj.prop2); // 8

Подробнее о MDN: get, set.

Наконец, вы можете сделатьэто в определениях классов тоже:

class Example {
    constructor(prop1) {
        this.prop1 = prop1;
    }
    get prop2() {
      return this.prop1 * 2;
    }
    set prop2(value) {
      this.prop1 = value / 2;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...