模仿Array.from的静态方法在Java语言中不起作用

问题描述 投票:0回答:1

我正在尝试用口才的Javascript解决练习“组”(https://eloquentjavascript.net/06_object.html只是ctrl + f“组”一词。总而言之,我必须使用四种方法创建一个类似于Set的类:添加,删除, has and from。最后一个应该是静态的。

这是练习的解决方案:

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

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

  delete(value) {
    this.members = this.members.filter(v => v !== value);
  }

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

  static from(collection) {
    let group = new Group;
    for (let value of collection) {
      group.add(value);
    }
    return group;
  }
}

let group = Group.from([10, 20]);
console.log(group.has(10));
// → true
console.log(group.has(30));
// → false
group.add(10);
group.delete(10);
console.log(group.has(10));

我的疑问涉及静态方法以及作者选择迭代可迭代对象的方式。为什么要这样更改静态方法:

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

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

  delete(value) {
    this.members = this.members.filter(v => v !== value);
  }

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

  static from(collection) {
    let group = new Group;
    group = [...collection];
    return group;
  }
}

let group = Group.from([10, 20]);
console.log(group.has(10));
// → true
console.log(group.has(30));
// → false
group.add(10);
group.delete(10);
console.log(group.has(10));

在console.log(group.has(10))上;有错误“ group.has不是函数”吗?

javascript class object
1个回答
0
投票

因为group不再是Group。实际上,现在是Array

let group = new Group;
// in the line below group is not a Group anymore; it's a Array
group = [...collection]; 

并且由于Array类没有has方法,这将引发错误

© www.soinside.com 2019 - 2024. All rights reserved.