次のような単純な ES6 クラスがあります。
class Ring extends Array {
insert (item, index) {
this.splice(index, 0, item);
return this;
}
}
new Ring(1, 2, 3)[3]
Ring オブジェクトのインデックスがラップして、 1 が返され、3 が返されるようにしたいと考えていますnew Ring(1, 2, 3)[-1]
。これは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()
呼び出しがそれを返すように、このプロキシをクラスに適用する方法はありますか?