Почему ключевое слово "this" не работает со статическими методами в классе из моего кода ниже? - PullRequest
0 голосов
/ 24 августа 2018

Я выполняю упражнение из JavaScript Eloquent: Раздел упражнения -> Группы .Мне удалось хорошо написать код, но я не понимаю, почему мой код не работает, когда я использую this.

Мой текущий код:

class Group {
  constructor() {
    this.members = [];
  }

  has(value) {
    return this.members.includes(value);
  }

  add(value) {
    if (!this.has(value)) this.members.push(value);
  }

  delete(value) {
    if (this.has(value)) return this.members =
      this.members.filter(element => element != value);
  }

  static from(array) {
    let newGroup = new Group();
    for (let element of array) {
      newGroup.add(element);
    }
    return newGroup;
  }
}

Я пытался изменить static from(array) {...} to:

static from(array) {
  let newGroup = new Group();
  for (let element of array) {
    this.members.push(element);
  }
  return newGroup;
}

Учитывая, что newGroup.add(element) и this.members.push(element) относительно одинаковы, почему последний не работает во втором статическом методе?

1 Ответ

0 голосов
/ 24 августа 2018

Учитывая, что newGroup.add (элемент) и this.members.push (элемент)

Нет.this внутри статического метода указывает на сам класс (Group), он не указывает на несуществующий экземпляр.Это означает, что вы можете использовать его как:

 let newGroup = new this();
 newGroup.members.push(element);
...