Пользовательский массив, похожий на массив в JavaScript

У меня простой класс ES6, вот так:

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

Я хочу сделать так, чтобы индексирование для объектов Кольца обернулось так, чтобыnew Ring(1, 2, 3)[3] возвращает 1,new Ring(1, 2, 3)[-1] возвращает 3 и так далее. Это возможно в ES6? Если так, то как бы я это реализовал?

Я читал о прокси, которые позволяют получить полностью настроенный метод получения, но я не могу понять, как применить прокси к классу. Мне удалось это:

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 теперь является объектом Ring, который поддерживает индексы обтекания. Проблема в том, что мне каждый раз приходится определять объекты Ring. Есть ли способ применить этот прокси к классу, так что вызовnew Ring() возвращает это?

Ответы на вопрос(3)

Ваш ответ на вопрос