Mam proste klasy ES6, tak:klienta Array podobny getter w JavaScript
class Ring extends Array {
insert (item, index) {
this.splice(index, 0, item);
return this;
}
}
chcę to zrobić tak, że indeksowanie dla pierścienia obiektów okłady, tak że new Ring(1, 2, 3)[3]
zwraca 1, new Ring(1, 2, 3)[-1]
zwraca 3 , i tak dalej. Czy to możliwe w ES6? Jeśli tak, w jaki sposób mogę go wdrożyć?
Przeczytałem o serwerach proxy, które pozwalają na całkowicie dostosowany program pobierający, ale nie wiem, jak zastosować proxy do klasy. I udało to:
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
jest teraz obiektem Pierścień, który obsługuje zawijania indeksów. Problem polega na tym, że za każdym razem musiałbym definiować takie obiekty Ring. Czy istnieje sposób zastosowania tego proxy do klasy tak, aby wywołanie go zwróciło?
Wystarczy owinąć 'nowy Proxy (...)' z funkcji konstruktora i nazywają go 'new'. Tak, nie możesz tego zrobić bez proxy. – estus