我在 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
如果因为我的代码不好而导致测试未通过,我不介意自己修复它。我只是想知道为什么会出现错误。
非常感谢。
最佳答案
Group.from
是一个static 方法 - this
里面会引用 Group
class,而不是实例。所以
return this.array = 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
函数,该函数已被排除在您发布的代码之外。
关于javascript - 获取 object.function 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54471778/