Мне кажется, это хорошо работает.Это другой синтаксис, чем я бы использовал.Ключевое различие в поведении состоит в том, что ваша фабрика позволяет мне видеть внутреннюю сферу.Я могу получить доступ к цвету и конфигурации с mazdaF.color
или mazdaF.config
.Если вы хотите, чтобы это работало таким образом, это нормально.Но если вы хотите, чтобы внутренняя область была приватной для объекта, вы должны использовать другой синтаксис.
Вот еще один способ (я не уверен, что это универсальная стандартная практика, поэтому я надеюсь, что кто-то еще будет вмешиваться ...):
const carFactory2=(c,s,o)=>{
const color=c;
const config={'speed':s, 'oil':o};
const internal=()=>{
console.log('internal');
}
return{
gas: ()=>{
internal();
return color;
},
brake: ()=>{
internal();
}
}
}
var mazdaF = carFactory2( "red", 10, 130 );
Этот способ фактически делает объект, которыйсохраняет внутреннюю область действия функции.color
, config
и internal()
недоступны вне функции и, следовательно, не могут быть изменены в нисходящем направлении, если вы не добавите для этого метод.Здесь mazdaF.gas()
вернет цвет и выполнит внутренний метод.... Но config
также нельзя изменить, вызвав mazdaF.brake()
ИЛИ грубая сила с mazdaF.config = ...
.
Надеюсь, я не вызываю замешательства.Опять же, я думаю, что ваш выбор будет зависеть от того, как вы хотите использовать внутреннюю область.