javascript扩展Array并获得完全控制权

时间:2017-09-05 20:42:26

标签: javascript arrays typescript

我想要完成的是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 namevalue Jhone Doe的所有项目,但显然我无法分配this实例,所以如何我会解决这个问题吗?

1 个答案:

答案 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有关。对诸如数组之类的奇异对象进行子类化仍然是一项正在进行中的工作。