Предположительно, вы хотите определить эти функции как получатели для какого-либо объекта или класса.Давайте предположим, что это класс.
Этот синтаксис не может работать - он создает Value
геттер, а не funcone
геттер.Теперь, пока вы можете определить метод получения, используя переменную для имени метода получения:
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
.
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
Это был бы почти тот же самый код, чтобы дать методы получения объекту, а не классу;вы бы просто определяли свойства для самого объекта, а не для прототипа.