我在javascript中制作了一个名为Group的类,其中包含一些方法。当我尝试测试这些方法时,控制台会抛出“ x不是函数”,我不确定为什么。
这是代码
class Group {
constructor(){
this.array= []
}
add(number){
this.array.push(number);
}
delete(number){
this.array = filter(this.array, n => n != number);
}
has(number){
for(let value in this.array){
if(value === number) return true;
return false;
}
}
static from(object){
return this.array = object;
}
}
这是测试
let group = Group.from([10, 20]);
console.log(group);
console.log(group.has(10));
// → true
console.log(group.has(30));
// → false
group.add(10);
group.delete(10);
console.log(group.has(10));
// → false
如果由于我的代码不好而未通过测试,则我不介意自己修复该问题。我只是想知道为什么会收到错误消息。
非常感谢您。
答案 0 :(得分:4)
Group.from
是一个 static 方法-其内部的this
将引用Group
class ,而不是实例。所以
return this.array = object;
分配给类,然后返回传递的object
本身,这不是您想要的。
使用new
返回实例-更改构造函数以接受默认为空数组的数组,该数组分配给实例的.array
属性:
class Group {
constructor(arr = []) {
this.array = arr;
}
add(number) {
this.array.push(number);
}
delete(number) {
// need to define your filter method for this delete method to work
// this.array = filter(this.array, n => n != number);
}
has(number) {
for (let value in this.array) {
if (value === number) return true;
}
return false;
}
static from(arr) {
return new this(arr);
// could also do return new Group(arr), but that's less flexible
}
}
let group = Group.from([10, 20]);
console.log(group);
console.log(group.has(10));
// → true
console.log(group.has(30));
// → false
group.add(10);
请注意,您的delete
方法取决于您的filter
函数,该函数未包含在您发布的代码中。