是否有人可以解释这个javascript类的行为?
首先,我不理解这个代码如何在不使用new操作符的情况下创建Group类的新实例是否有人可以解释这个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} *但是,通过引用访问的值(如数组或对象)将导致重复值,因为引用
其次,我对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));