Пишите комментарий на ответ, а не новый ответ на свой же вопрос.
По существу: откройте любой туториал по запросу node.js websocket и посмотрите, как там все прекрасно хранится в памяти, и как объявляются массивы в JS.
@kazhuravlev страдать:)
Есть несколько решений.
1) Некоторые фреймворки могут генерить формы и их элементы сразу с джаваскриптом, который будет валидировать (см. джанговские виджеты в админке).
2) Клиентская валидация отличается от серверной (иногда это имеет смысл), как правило она проще и проверяется только самое необходимое (заполненность полей).
3) Правила валидации пишутся на каком-то DSL, код клиентского валидатора либо генерируется, либо парсит этот DSL (примерно как описал @vitaliycto).
@Petroveg Давайте исходить из классического определения ООП, как в школе учили — инкапсуляция, полиморфизм и наследование.
* Инкапсуляция (не путаем со сокрытием данных) — то есть объединение данных и операций на ними есть? Есть. (Сокрытие данных, впрочем, тоже можно эмулировать.)
* Полиморфизм — в силу динамической типизации есть.
* Наследование — любой объект имеет скрытое поле [[prototype]], которое ссылается на некий другой объект. Если при запросе некоторого свойства оно не находится в данном объекте, то оно ищется у объекта, прописанного в [[prototype]]. Есть.
Ну и если все-таки перебороть противоестественное отвращение к гуглению и википедии, то увидим, что в объектно-ориентированной парадигме манипулируют объектами и классами или прототипами.
@Petroveg ООП в JS есть, и практика показывает, что именно ооп является более понятным и простым способом повторного использования кода, несмотря на успехи фп.
Работа с HTML, все эти события и пр. — банальщина. Замыкания — да.
Не путайте наличие в языке классов и ооп — бесит неимоверно.
По существу: откройте любой туториал по запросу node.js websocket и посмотрите, как там все прекрасно хранится в памяти, и как объявляются массивы в JS.