ES6中对象数组的setter

时间:2017-04-06 14:34:20

标签: javascript setter es6-class

我有一个类,其中包含一个用于包含特定类型对象的数组。

class Test {
    constructor() {
      this.objects = [];
    }

    # Only objects with positive foobars should be returned
    get objects() { return this.objects.filter(o => o.foobar >= 0); }
}

我不需要在数组中设置值的任何特殊处理,所以我没有写一个set方法。但现在我收到一个错误,说我不能写入只有getter方法的属性。所以我尝试重建默认的setter方法,如下所示:

set objects(k,v) { this.objects[k] = v; }
set objects[k](v) { this.objects[k] = v; }
set objects(v) { this.objects = v; }

但上述工作都没有。我只是希望能够像往常一样通过this.objects [2] = foobar设置数组中的值。我如何告诉ES6?

2 个答案:

答案 0 :(得分:3)

您无法在getter中的对象中写入对象。它可能会导致最大呼叫。 我建议你这样写。

class Test {
  construct() {
    this.objects = [];
  }
  get legalobjects() { 
    return this.objects.filter(o => o.foobar >= 0);
  }
}

您可以根据需要设置对象

答案 1 :(得分:2)

您应该以不同的方式命名对象属性和原型的getter,否则构造函数将尝试在this.objects = ...时找到与原型(类的)getter对应的setter。

class Test {
    constructor() {
      this.objects = [];
    }

    get positiveObjects() { this.objects.filter(o => o.foobar >= 0); }
}

注意:您的构造函数方法名称错误。它应该是constructor,而不是construct。同时你纠正了它。