Я думаю, что, вероятно, наиболее используемой техникой для имитации классов и наследования классов в Javascript, которая находится за пределами BIG-фреймворков, является решение Simple Javascript Inheritance от Джона Резига (http://ejohn.org/blog/simple-javascript-inheritance).
По крайней мере, в экосистеме jquery. Некоторые люди также извлекли решение наследования из backbone.js (которое, похоже, основано на goog.inherits http://bolinfest.com/javascript/inheritance.php).
Мне нравятся оба решения. Но почему-то я чувствую, что есть более простые решения, особенно в некоторых подрайонах, например в синглетонах Javascript, которые учитывают тот факт, что JS имеет только объекты.
Две книги / блоги меня очень впечатлили в этом отношении. Первым был «Шаблоны Javascript» от Стояна Стефанова (глава «Шаблоны повторного использования кода»), особенно «наследование» / повторное использование кода через функцию «расширения» (мелкая копия).
Другой был «Шаблоны модулей AMD: Singleton» (http://unscriptable.com/2011/09/22/amd-module-patterns-singleton). Это было довольно увлекательно:
Поскольку AMD выполняет функцию определения только один раз, мы, по сути, создали синглтон.
Так что я хочу иметь такие синглтоны AMD, просто объект, который возвращается функцией фабрики / определением amd.
Но я также хочу иметь возможность «наследовать» / повторно использовать методы от других синглетонов AMD. Это было бы достижимо с помощью функции расширения.
Теперь встает вопрос:
Extend просто дает мне «публичные» методы одноэлементных модулей AMD, но я также хочу иметь «частные» (функции области закрытия).
Я мог бы внедрить метод «extractAllMethods» в одноэлементные модули, которые возвращают все (также частные) свои методы вызывающему методу и объединяют его с расширением, чтобы объединить его с новым одноэлементным, но действительно ли это хорошее решение? *
У кого-нибудь есть лучшее решение для извлечения частных методов из одноэлементного модуля AMD?
Заранее спасибо
Wolfgang