如何使用map(ES6)返回函数列表?(ES6)

时间:2019-05-30 06:58:03

标签: ecmascript-6

如何使用地图返回此输出

get funcone() { return this.Form.get(funcone"); }
get functwo() { return this.Form.get("functwo"); }
get functhree() { return this.Form.get("functhree"); }
get funcfour() { return this.Form.get("funcfour"); }
 

我使用了这个数组

FormValues=['funcone','functwo','functhree','funcfour'];

还有这张地图

FormValues.map(Value=>{
    get Value() { return this.Form.get(Value); }
 })

我将不胜感激!

1 个答案:

答案 0 :(得分:1)

大概您想将这些函数定义为某个对象或类上的吸气剂。我们假设它是一个类。

该语法不起作用-它创建了Value的getter,而不是funcone的getter。现在,当您可以使用变量作为getter名称来定义getter时:

let propName = "foo";
class Foo {
  get [propName]() { return "You're getting a foo"; }
}
new Foo().foo
// => "You're getting a foo"

据我所知,没有办法在class声明中进行循环,也没有办法像Ruby中那样继续重新打开类并向其中添加新内容,因此class的定义循环内也行不通。

但是,class语法只是较旧的原型继承的糖,因此我们可以使用类语法进行的所有操作,也可以不使用它(尽管反之亦然)。为了向类中添加新内容,我们只需要将其粘贴到类的原型对象上即可。我们可以使用Object.defineProperty显式定义getter方法。

class Foo {
  constructor() {
    this.Form = {
      one: 1,
      two: 2,
      three: 3,
      four: 4
    }
  }
}

let props = ['one', 'two', 'three', 'four'];
props.forEach(propName =>
  Object.defineProperty(Foo.prototype, propName, {
    get: function() { return this.Form[propName]; }
  })
);

new Foo().three
// => 3

将吸气剂分配给对象而不是类几乎是相同的代码;您只需要在对象本身而不是原型上定义属性。