Я думаю, у меня есть для вас предложение:
function engines(x) {
return {
numberOfEngines: x.numberOfEngines,
costPerEngine: x.costPerEngine
}
}
Если вы передаете двигатель:
function aircraftFactory(x, engine) {
let aircraft = {
manufacturer: x.manufacturer,
factory: x.factory
};
if (engine) {
aircraft.numberOfEngines = engine.numberOfEngines;
aircraft.costPerEngine = engine.costPerEngine;
}
return aircraft;
}
Вы можете создать экземпляр следующим образом:
let aircraft = aicraftFactory(x, engineFactory(y));
Но если вы хотите создать свойства, не зная имен:
function aircraftFactory(x, extended) {
let aircraft = {
manufacturer: x.manufacturer,
factory: x.factory
};
if (engine) {
for (let key in extended) {
aircraft[key] = extended[key];
}
}
return aircraft;
}