ES6类实现了像数组一样的索引器

时间:2015-09-17 05:10:04

标签: ecmascript-6

我想实现索引器从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]

1 个答案:

答案 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'