Как использовать карту (ES6), чтобы вернуть список функций? (ES6) - PullRequest
0 голосов
/ 30 мая 2019

Как я могу использовать карту, чтобы вернуть этот вывод

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 Ответ

1 голос
/ 30 мая 2019

Предположительно, вы хотите определить эти функции как получатели для какого-либо объекта или класса.Давайте предположим, что это класс.

Этот синтаксис не может работать - он создает 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

Это был бы почти тот же самый код, чтобы дать методы получения объекту, а не классу;вы бы просто определяли свойства для самого объекта, а не для прототипа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...