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?

questionAnswers(3)

yourAnswerToTheQuestion