@toha_man

Какая должна быть реализация класса, чтобы выражение Base.x + Base.x === 3 && new Base().x === Base.x + Base.x было истинным?

Вот такое интересное задание встретил. Даже ума не приложу как, это может работать. Особенно непонятна вторая часть, где используется new Base().x. В какую сторону читать, чтобы разобраться с этим?

class Base ....

if (Base.x + Base.x === 3 && new Base().x === Base.x + Base.x) {
    console.log('Nice!');
}
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Один x - свойство экземпляра, другой - статический геттер:

class Base {
  constructor() {
    this.x = 3;
  }

  static get x() {
    return 1.5;
  }
}

Классом этой штуке быть не обязательно:

function Base() {
  this.x = 3;
}
Base.x = 1.5;

// или

function Base() {}
Base.prototype.x = 3;
Base.x = 1.5;

UPD. Наконец-то появились статические свойства, а свойства экземпляра стало необязательно инициализировать в конструкторе:

class Base {
  x = 3;

  static x = 1.5;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы