Пользовательский массив, похожий на массив в 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()
возвращает это?