я просматривал блог о составе объектов , и он показывал этот код здесь:
const canSayHi = self => ({
sayHi: () => console.log(`Hi! I'm ${self.name}`)
});
const canEat = () => ({
eat: food => console.log(`Eating ${food}...`)
});
const canPoop = () => ({
poop: () => console.log('Going to ?...')
});
// Combined previous behaviours
const socialBehaviors = self => Object.assign({}, canSayHi(self), canEat(), canPoop());
const alligator = name => {
const self = {
name
};
const alligatorBehaviors = self => ({
bite: () => console.log("Yum yum!")
});
return Object.assign(self, socialBehaviors(self), alligatorBehaviors(self));
};
const jack = alligator("jack");
Когда вы заходите к джек-аллигатору, вы, конечно, можете получить доступ к именисобственность на домкрат.Что делать, если я хотел, чтобы это свойство было приватным, чтобы имя jack.name возвращалось неопределенным.Я предполагаю, что для этого потребуется закрытие, но я не уверен в лучшем / самом чистом способе сделать это или просто в обычном способе, которым это делается.
Я понимаю, что вы не могли просто передать себя объекту object.assign,но что, если у вас есть смесь переменных, которые вы хотите, чтобы некоторые были частными, а некоторые - публичными?Я бы подумал, что решение здесь будет иметь литерал 'state' со всеми закрытыми переменными и литерал 'base', который имеет все публичные переменные, если вы хотите получить доступ к чему-либо в базовом литерале, который вам затем потребуется использоватьэто в других объектах в objects.assign.