为什么“ this”关键字不能与下面代码中的类中的静态方法一起使用?

时间:2018-08-24 13:01:00

标签: javascript static this

我正在从Eloquent's JavaScript: Exercise Section -> Groups开始练习。我设法编写了代码,但是我不明白为什么在使用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) {...}更改为:

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 :(得分:3)

  

考虑到newGroup.add(element)和this.members.push(element)

不。静态方法中的this指向类本身(Group),而不指向不存在的实例。这意味着您可以将其用作:

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