Benutzerdefinierter Array-ähnlicher Getter in JavaScript

Ich habe eine einfache ES6-Klasse, wie folgt:

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

Ich möchte es so machen, dass die Indizierung für Ring-Objekte einbricht, so dassnew Ring(1, 2, 3)[3] gibt 1 zurück,new Ring(1, 2, 3)[-1] gibt 3 zurück und so weiter. Ist das in ES6 möglich? Wenn ja, wie würde ich es implementieren?

Ich habe über Proxys gelesen, die einen vollständig angepassten Getter ermöglichen, kann aber nicht herausfinden, wie ein Proxy auf eine Klasse angewendet wird. Ich habe das geschafft:

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 ist jetzt ein Ring-Objekt, das das Umbrechen von Indizes unterstützt. Das Problem ist, dass ich jedes Mal solche Ring-Objekte definieren muss. Gibt es eine Möglichkeit, diesen Proxy auf die Klasse anzuwenden, sodass der Aufruf vonnew Ring() gibt es zurück?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage