好吧,我有一个问题。
简短的版本。 我想这样做
const createThing = function( behaviours(intensities) ){
return {
behaviour1: behaviour1(intensity1),
behaviour2: behaviour2(intensity2)
and so on for each behaviour(intensity) passed as an argument
}
}
//so when doing:
const wtf = createThing( cat(loud), dog(whereistheball), bird(dee) );
// wtf should be:
{
cat: cat(loud),
dog: dog(whereistheball),
bird: bird(dee)
}
我尝试过其他的方法,比如这样
const createThing = function( behaviours(intensities) ){
return {
for(a in arguments){
[a.name]: a;
}
}
}
在过去的一周里,我尝试了很多不同的方法来做这件事,但没有成功。谁能帮帮我?
长篇大论。 我有一个磁铁行为工厂函数和一个粒子工厂函数,看起来是这样的:
const magnet = funtion(intensity) {
// returns a magnetic object with that intensity
}
const createParticle = function( location, static or dynamic, behaviours ){
// returns a particle object with the properties and behaviours listed above
}
问题是我不能让行为部分工作。现在我已经有了一个磁性行为工厂,但我还想有一个eletrical,gravitacional,随机等行为。我想让粒子对象得到行为名作为一个新的属性键,当这个行为作为参数传递给粒子工厂函数时,它创建的对象作为这个属性值,类似这样。
const particle1 = createParticle ( location, dynamic, magnet(intensity) )
//should return
{
location,
dynamic,
magnet: magnet(intensity)
}
或者甚至是...
const particle2 = createParticle ( location, dynamic, magnet(intensity), eletric(intensity) )
//should return
{
location,
dynamic,
magnet: magnet(intensity),
eletric: eletric(intensity)
}
等等。
我试着使用function.name方法,但这是不可能的,因为当我把行为函数作为参数传递给粒子时,它就会被评估为一个对象。我试过使用回调函数,然后使用function.name,但它没有任何作用,因为我仍然需要将行为函数与其参数一起传递给粒子工厂。
这有可能吗?怎么做?
不,这是不可能的。不,这是不可能的,除非 cat
dog
bird
magnet
eletric
都返回一个包含各自工厂名称的对象。
尤其是
function createParticle(...args) {
const particle = { kind: 'particle' };
for (const element of args)
particle[element.kind] = element;
return particle;
}
如果你使用的是classesconstructors+prototypes, 你当然可以使用隐式的... ... .constructor.name
而非 .kind
我在上面的例子中选择的属性。