Определение нескольких функций одновременно

#javascript #node.js

#javascript #node.js

Вопрос:

Мне нужно объявить 26 функций для букв от a до z, вот так:

 foo.a = function() {
 // code
}

foo.b = function() {
 // code
}

foo.c = function() {
 // code
}
 

и так далее. Но это очень избыточно и довольно раздражает, поэтому мне интересно, есть ли более простой способ сделать это.

Комментарии:

1. Будет полезно узнать, что будет делать каждая из функций, чтобы помочь вам наиболее эффективно .. не могли бы вы рассказать нам, каковы ваши намерения, пожалуйста?

2. Какой смысл назначать один и тот же код функции 26 различным свойствам одного и того же объекта? Это вообще не имеет смысла. Я на 100% уверен, что есть лучший способ решить любую проблему, которую вы на самом деле пытаетесь решить. В будущем расскажите нам, в чем заключается реальная проблема, и у нас есть шанс предложить вам гораздо лучшие способы ее решения, чем те, о которых вы думали до сих пор.

Ответ №1:

Конечно, вы можете сделать это в цикле:

 const foo = {}
'abcdefghijklmnopqrstuvwxyz'.split('').forEach((letter) => {
  foo[letter] = function () { /* code */ }
})
 

Я выписал буквы в строке для наглядности, но есть и другие способы генерации строк из последовательных символов, например, с использованием массива и String.fromCharCode.

Это вам совсем не поможет, если код в каждой функции должен быть уникальным, поскольку все, что вам нужно, — это то, что у вас есть, но если вы хотите, например, заставить каждую функцию возвращать свою собственную букву, это сработает.

 'abcdefghijklmnopqrstuvwxyz'.split('').forEach((letter) => {
  foo[letter] = () => letter
})
 

Комментарии:

1. Спасибо! Будет ли это нормально работать для нестатических методов в классе?

2. Это будет. Вы можете либо сделать это в классе, например, в конструкторе с this[letter] = ... помощью , либо вы можете сделать это вне класса, используя SomeClass.prototype[letter] = ... , поскольку классы, по крайней мере частично, являются просто синтаксическим сахаром для прототипов.