我有一个简单的 ES6 类,如下所示:
class Ring extends Array {
insert (item, index) {
this.splice(index, 0, item);
return this;
}
}
我想让 Ring 对象的索引换行,这样new Ring(1, 2, 3)[3]
返回 1,new Ring(1, 2, 3)[-1]
返回 3,依此类推。这在 ES6 中可能吗?如果是这样,我将如何实施?
我读过有关代理的内容,它允许完全自定义的 getter,但我不知道如何将代理应用于类。我确实做到了这一点:
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()
退货吗?
基本上是
class ProxyRing extends Array {
constructor(...args) {
super(...args)
return new Proxy(this, {
get: function (target, name) {
var len = target.length;
if (typeof name === 'string' && /^-?\d+$/.test(name))
return target[(name % len + len) % len];
return target[name];
}
});
}
insert (item, index) {
this.splice(index, 0, item);
return this;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)