我将在ES6中重写一个应用程序(最初是香草JS ),其中模块模式很受欢迎。
在开始的时候,我意识到我正在努力实现‘关注点分离’,因为如果我们要在ES6中应用数据隐私,我们只使用"{}“,而不像普通的JS那样使用since (众所周知,它实际上是函数表达式)。
香草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中,为了传递控制器模块中的其他模块,并且能够使用/传递公共方法,我尝试使用简单的func表达式,而不是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,即所谓的封装以及上面提到的事情吗?任何想法都将不胜感激!干杯,谢谢!
发布于 2018-10-06 10:11:11
您需要执行那个BudgetCrtl来像BudgetCrtl().getSum(3)那样访问getSum函数,因为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);
https://stackoverflow.com/questions/52677794
复制相似问题