Как наследовать объект самовызывающейся функции?

Организовал код по паттерну "модуль".

var basketModule = (function() {
  var basket = [];
    return {
        addItem: function(values) {
            basket.push(values);
        },
        getItemCount: function() {
            return basket.length;
        },
        getTotal: function() {
           var q = this.getItemCount(),p=0;
            while(q--){
                p+= basket[q].price; 
            }
            return p;
        }
    }
}());


Я хочу получить этот же объект, но иметь возможность переопределить метод и свойство. Возможно ли это?Или мне нужно полностью копировать этот код, менять некоторые свойства и методы? Тогда получится что 80% кода будет повторным, что не хорошо...
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
@asdz
шаблон "модуль" инкапсулирует приватные методы. Т.е. "перегрузить" их не получится, нужно использовать прототипное наследование или литеральную нотацию ({}) что используется в фабричных функциях.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
usdglander
@usdglander
Yipee-ki-yay
Вам нужно почитать про prototype. В JS используется прототипное наследование.
Ответ написан
Комментировать
Это называется фабрика объектов:
function Basket(option1, option2, ...) {
    var basket = [];

    return {
        "option1": option1,
        "option2": option2,
        ...
    }
}

var basket = Basket(function() {...}, function() {...}, ...)
Ответ написан
Комментировать
kirill89
@kirill89
Ну, как вариант, можно использовать ООП фреймворк (easejs например). Но на мой взгляд лучше использовать прототипное наследование, а "приватные" свойства и методы помечать префиксом (например BasketModule.prototype.__privateMethod = ...;)
Этот подход используется не только в JS, но и в python например.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы