我想要完成的是sub/child
class
Array<T>
,它有我自己的自定义方法,但我遇到问题,我无法编辑Array
...
让我们看一个例子来澄清我在做什么:
export class Collection<T> extends Array<T>
{
remove(key, value) {
this = this.filter(function (el) {
return el[key] !== value;
});
}
}
所以我可以Array
User
let users:Collection<User> = [];
//add stuff etc ...
//then I can say
users.remove('name','Jhone Doe');
所以它会删除包含key
name
和value
Jhone Doe
的所有项目,但显然我无法分配this
实例,所以如何我会解决这个问题吗?
答案 0 :(得分:0)
首先,除非您将数组声明为
,否则根本找不到remove
let users: Collection<User> = [];
其次,如果你想删除这些元素,你需要使用splice
,或者自己动手:
remove(key, value) {
let j = 0;
for (const el of this) if (el[key] !== value) this[j++] = el;
this.length = j;
}
即使您已完成所有这些操作,如果您遇到意外行为,我也不会感到惊讶,特别是与length
有关。对诸如数组之类的奇异对象进行子类化仍然是一项正在进行中的工作。