Getter personalizado tipo matriz en JavaScript

Tengo una clase simple de ES6, así:

class Ring extends Array {
    insert (item, index) {
        this.splice(index, 0, item);
        return this;
    }
}

Quiero hacerlo para que la indexación de los objetos Ring se ajuste, de modo quenew Ring(1, 2, 3)[3] devuelve 1,new Ring(1, 2, 3)[-1] devuelve 3, y así sucesivamente. ¿Es esto posible en ES6? Si es así, ¿cómo lo implementaría?

He leído sobre proxies, que permiten un getter completamente personalizado, pero no puedo entender cómo aplicar un proxy a una clase. Logré esto:

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 ahora es un objeto Ring que admite índices de ajuste. El problema es que tendría que definir objetos Ring así siempre. ¿Hay alguna manera de aplicar este proxy a la clase de modo que llamenew Ring() lo devuelve?

Respuestas a la pregunta(3)

Su respuesta a la pregunta