如何使用地图返回此输出
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); }
})
我将不胜感激!
答案 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
将吸气剂分配给对象而不是类几乎是相同的代码;您只需要在对象本身而不是原型上定义属性。