我正在尝试用口才的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不是函数”吗?
因为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
方法,这将引发错误