I have a simple ES6 class, for example:
class Ring extends Array { insert (item, index) { this.splice(index, 0, item); return this; } }
I want to make the indexing of Ring objects wrap so that new Ring(1, 2, 3)[3] returns 1, new Ring(1, 2, 3)[-1] returns 3, and so on. Is this possible in ES6? If so, how do I implement it?
I read about proxies that allow getter to be fully configured, but I cannot figure out how to apply proxies to a class. I dealt with this:
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 now a Ring object that supports wrapping indices. The problem is that I have to define Ring objects like this every time. Is there a way to apply this proxy to a class so that calling new Ring() returns it?
javascript ecmascript-6 es6-proxy
Etproductions
source share