通过将功能列表传递给工厂函数在javascript中组合对象
举一个例子 我应该如何修改此代码,以便能够根据传递给factory函数的参数分配功能 例如,我可以有这样一个名称数组:通过将功能列表传递给工厂函数在javascript中组合对象,javascript,ecmascript-6,object-composition,Javascript,Ecmascript 6,Object Composition,举一个例子 我应该如何修改此代码,以便能够根据传递给factory函数的参数分配功能 例如,我可以有这样一个名称数组: let properties = ["barker", "driver", "killer" etc... ]; murderRobotDog(name, properties); 它会把Object.assign分配给每个函数名吗 我仍在学习新语法,我尝试使用如下扩展运算符: return Object.assign({}, ...properties(state));
let properties = ["barker", "driver", "killer" etc... ];
murderRobotDog(name, properties);
它会把Object.assign分配给每个函数名吗
我仍在学习新语法,我尝试使用如下扩展运算符:
return Object.assign({}, ...properties(state));
结果才意识到,这不是任何一种工作方式。我也不知道该怎么做一个循环。应该如何做到这一点?您可以创建一个字典,其中键构成函数名。然后,您可以在属性上循环并执行Object.assign:
const barker = (state) => ({
bark: () => console.log('Woof, I am ' + state.name)
});
const driver = (state) => ({
drive: () => state.position = state.position + state.speed
});
let types = {
barker,
driver
};
const murderRobotDog = (name, properties) => {
let state = {
name,
speed: 100,
position: 0
};
let obj = {};
for(let prop of properties) {
Object.assign(obj, types[prop](state));
}
return obj;
}
let properties = ["barker", "driver"];
let result = murderRobotDog('Name', properties);
console.log(result);
result.bark()
输出:
node .\index.js
{ bark: [Function: bark], drive: [Function: drive] }
Woof, I am Name
它是否需要一个名称数组?一组属性(
[barker,driver,killer]
)会简单得多
node .\index.js
{ bark: [Function: bark], drive: [Function: drive] }
Woof, I am Name