是否有人可以解释这个javascript类的行为?

是否有人可以解释这个javascript类的行为?,javascript,Javascript,首先,我不理解这个代码如何在不使用new操作符的情况下创建Group类的新实例 其次,我对from方法的工作方式也有问题这几乎与Set类相同,Set是一个不重复值的列表 在数学中,集合是定义明确的不同对象的集合,其本身被视为对象 只是意味着可能没有重复的值* let set=新集合([1,2,3,3]) //集合(3){1,2,3} 集合。添加(3) //集合(3){1,2,3} 集合。添加(4) //集合(4){1,2,3,4} *但是,通过引用访问的值(如数组或对象)将导致重复值,因为引用

首先,我不理解这个代码如何在不使用new操作符的情况下创建Group类的新实例
其次,我对from方法的工作方式也有问题

这几乎与
Set
类相同,Set是一个不重复值的列表

在数学中,集合是定义明确的不同对象的集合,其本身被视为对象

只是意味着可能没有重复的值*

let set=新集合([1,2,3,3])
//集合(3){1,2,3}
集合。添加(3)
//集合(3){1,2,3}
集合。添加(4)
//集合(4){1,2,3,4}
*但是,通过引用访问的值(如数组或对象)将导致重复值,因为引用不是按值比较的,而是按RAM中的地址比较的

let set=new set([[1],[1]])
//集合(2){[1],[1]}
因此,相同的引用将被过滤掉

let ref=[1]
新设置(参考,参考)
//集合(1){1}

static关键字定义类的静态方法或属性。不能对类的实例调用静态方法或静态属性。相反,它们是在类本身上调用的静态方法通常是实用函数,例如创建或克隆对象的函数,而静态属性对于缓存、固定配置或不需要跨实例复制的任何其他数据非常有用

资料来源:

我增加了重点

不需要调用类构造函数就可以调用静态方法。来自的静态方法确实通过new关键字创建了一个新实例(该关键字反过来调用构造函数,该构造函数使用相应的members属性初始化一个新实例)。

“我不理解此代码与类如何在不使用new运算符的情况下创建组类的新实例”它调用
Group.from
,它本身调用
let Group=newgroup
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));