Я изо всех сил пытаюсь понять пару шаблонов JS, объединенных вместе: шаблон раскрывающегося модуля и шаблон цепочки.
В идеале я хотел бы иметь возможность вызывать несколько методов из одной функции инициализации, например:
components
.loader()
.menu()
.toolbar();
И это прекрасно работает до тех пор, пока любые методы, которые я определяю публично return this;
.
Однако все начинает идти не так, как надо, когда мне нужно вложить раскрывающиеся шаблоны модулей, чтобы открыть более глубокие методы, которые вызываются вне инициализации, например:
components
.menu
.close();
Проблема в том, что menu
больше не возвращает components
, а вместо этого возвращает свои дочерние методы, что означает, что в этот момент цепочка разрывается. Вот полный пример, иллюстрирующий то, чего я пытаюсь достичь:
var components = function () {
var loader = function () {
console.log("components.loader initialisation");
return this;
}
var menu = function () {
console.log("components.menu initialisation");
var open = function () {
console.log("components.menu.open");
return this;
}
var close = function () {
console.log("components.menu.close");
return this;
}
return {
open: open,
close: close
}
}();
var toolbar = function () {
console.log("components.toolbar initialisation");
return this;
}
return {
loader: loader,
menu: menu(),
toolbar: toolbar
}
}();
$(function () {
components
.loader()
.menu()
.toolbar();
components
.menu
.open();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
components.menu
вернетcomponents
(вместе с методамиopen
иclose
), аcomponents.menu.close()
также вернетcomponents
или толькоcomponents.menu.close()
вернетcomponents
? Возможно, было бы полезно обновить сообщение, включив в него результаты, ожидаемые для нескольких запросов. - person m-a-r-c-e-l-i-n-o   schedule 29.06.2016