Getter semelhante a uma matriz personalizada em JavaScript
Eu tenho uma classe ES6 simples, assim:
class Ring extends Array {
insert (item, index) {
this.splice(index, 0, item);
return this;
}
}
Eu quero fazer com que a indexação dos objetos Ring seja agrupada, para quenew Ring(1, 2, 3)[3]
retorna 1,new Ring(1, 2, 3)[-1]
retorna 3 e assim por diante. Isso é possível no ES6? Se sim, como eu o implementaria?
Eu li sobre proxies, que permitem um getter completamente personalizado, mas não consigo descobrir como aplicar um proxy a uma classe. Eu consegui isso:
var myRing = new Proxy (Ring.prototype, {
get: function (target, name) {
var len = target.length;
if (/^-?\d+$/.test(name))
return target[(name % len + len) % len];
return target[name];
}
});
myRing
agora é um objeto Ring que suporta índices de quebra automática. O problema é que eu teria que definir objetos Ring assim toda vez. Existe uma maneira de aplicar esse proxy à classe de forma que chamarnew Ring()
devolve?