我想实现索引器从data属性中获取元素,索引为JavaScript数组。我听说过ES6代理,但我无法将它实现到我的班级。现在是否可能,或者我应该等待更多的ES7。
class Polygon {
constructor() {
this.data = new Set(arguments)
}
[Symbol.iterator](){
return this.data[Symbol.iterator]()
}
add(vertex){
this.data.add(vertex)
}
remove(vertex){
this.data.delete(vertex)
}
get perimeter(){
}
get area(){
}
}
let poly = new Polygon()
let first_vertex = poly[0]
答案 0 :(得分:12)
AFAIK没有提议将“索引”到任意对象中,所以是的,你必须使用代理。
我无法真正测试这个,因为没有环境似乎支持类和代理,但理论上,你必须从构造函数返回新的代理对象。在Chrome v52中测试。
示例:
class Test {
constructor(data) {
let self = this;
this.data = data;
this.foo = 'bar';
return new Proxy(this, {
get(target, prop) {
if (Number(prop) == prop && !(prop in target)) {
return self.data[prop];
}
return target[prop];
}
});
}
}
var test = new Test([1,2,3]);
console.log(test[0]); // should log 1
console.log(test.foo); // should log 'bar'