Шаблон модуля - разделение проблем - инкапсуляция в ES6 - PullRequest
0 голосов
/ 06 октября 2018

Я собираюсь переписать приложение (оно изначально в vanilla JS) в ES6, в котором применяется модуль patter.

Вскоре я понял, что мне трудно получить 'разделение проблем »сделано, поскольку, если мы собираемся применить конфиденциальность данных в ES6, мы используем только« {} », но не IIFE, как в случае ванильного JS (которые, как известно, являются практически функциональными выражениями).

Решение Vanilla JS:

var budgetController = (function() {

    const x = 20;

    function add(a) {
        return x + a;
    }   

    return {
        getSum: function(b){
            console.log(add(b));
        } 
    }
})();



UIController = (function() {

    // some code

})();



Controller = (function(BudgetCrtl, UICtrl) {

    var n = BudgetCrtl.getSum(3);
    console.log(n);

})(budgetController, UIController);

В ES6 я попытался использовать просто выражения функции, а не IIFE, чтобы передать другой модуль в модуль контроллера и иметь возможностьиспользовать / передавать общедоступные методы, но он не работает.

Попытка ES6:

let budgetController = function() {
    const x = 20;
    function add(a) {
        return x + a;
    }   
    return {
        getSum: (b) => console.log(add(b))
    }
}



UIController = function() {
    // some code
}



Controller = function(BudgetCrtl, UICtrl) {
    const n = BudgetCrtl.getSum();
    console.log(n);
}
Controller(budgetController, UIController);

Может ли кто-нибудь дать мне какое-нибудь решение для того, чтобы каким-то образом участвовать в ES6так называемая инкапсуляция и вышеупомянутые вещи?Любая идея будет оценена!Ура, спасибо!

1 Ответ

0 голосов
/ 06 октября 2018

Вам нужно выполнить это BudgetCrtl, чтобы получить доступ к функции getSum следующим образом BudgetCrtl().getSum(3), поскольку BudgetCrtl - это функция, а не
значение, возвращаемое при ее выполнении.

плюс, если вы хотите, чтобы значение сохранялось в n, вы не должны сразу вызывать console.log в функции стрелки, потому что теперь он неявно возвращает undefined

let budgetController = function() {
    const x = 20;
    function add(a) {
        return x + a;
    }   
    return {
        getSum: (b) => {
          let newVal = add(b)

          console.log(newVal)

          return newVal // so that you can store the value in `n`
        }
    }
}



UIController = function() {
    // some code
}



Controller = function(BudgetCrtl, UICtrl) {
    const n = BudgetCrtl().getSum(3);
    console.log(n);
}
Controller(budgetController, UIController);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...