如何覆盖类中的set方法以使用array.push?

时间:2019-02-25 12:39:21

标签: javascript class

我正在尝试为对象中的某些属性覆盖set方法。

class MyClass extends Element {
  set locations(markers) {
    //setter implementation
  }
}

设置整个数组时正确
obj.locations = ['location1', 'location2'];

我想公开一个locations可以通过以下方式直观设置的API:
obj.locations.push('location3');
但是它甚至没有通过setter实现。

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

您的push行未调用设置程序。您没有分配数组,而是试图对其进行突变。为此,您需要定义 getter

这是一个简化的示例:

class MyClass {
  set locations(markers) {
    this._locations = markers;
  }
  get locations() {
    return this._locations; // Make sure to return an array instance
  }
}

var elem = new MyClass;

elem.locations = [];
elem.locations.push("test");
console.log(elem.locations);

如果您无法返回直接链接到实例状态的数组,那么让getter返回一个实现自身push以及您希望其公开的其他方法的对象。