Javascript mixins при использовании шаблона модуля

Некоторое время я использовал шаблон модуля, но недавно начал хотеть смешивать в них функции и свойства, чтобы увеличить повторное использование кода. Я прочитал несколько хороших ресурсов по этому вопросу, но все еще немного не уверен относительно наилучшего подхода. Вот модуль:

var myModule = function () {
    var privateConfigVar = "Private!";

    //"constructor"
    function module() {}

    module.publicMethod = function () {
        console.log('public');
    }

    function privateMethod1() {
        console.log('private');
    }

    return module;
}

И вот объект mixin:

var myMixin = function () {};
Mixin.prototype = {
    mixinMethod1: function () {
        console.log('mixin private 1');
    },
    mixinMethod2: function () {
        console.log('mixin private 2');
    }
};

В идеале я хотел бы смешать некоторые методы из других объектов как частные методы, а некоторые как открытые методы, чтобы я мог вызвать некоторую функцию "extension" с параметром "private" / "public". Так что

mixin(myModule, myMixin, "private");

делает методы myMixin доступными в myModule, просто вызывая mixinMethod1 () и имея правильную область видимости, и:

mixin(myModule, myMixin, "public");

делает методы myMixin доступными в myModule путем вызова module.mixinMethod1 () и имеют правильную область видимости

Я попытался использовать метод, который копирует свойства из одного прототипа в другой, я попробовал метод удлинения подчеркивания, чтобы скопировать свойства объекта из одного в другое, и различные вещи между ними. Я думаю, что на данный момент я немного обернулся относительно области применения и прототипов, и мне бы хотелось получить некоторое представление о том, как лучше всего делать миксины, подобные этому, при использовании шаблона модуля. Обратите внимание, что не имеет значения, как выглядит объект myMixin (будь то добавление функций к прототипу или сам модуль), я просто пытаюсь найти способ заставить его работать.

Поблагодарить!

Ответы на вопрос(3)

Ваш ответ на вопрос