我正在尝试创建绑定每个函数对特定动物的引用,但它从未引用我期望的正确动物?
我尝试使用各种 .call、.binds,但我不确定我是如何滥用它们的。
const sleeper = animal => ({
sleep() {
animal.energy += 10;
console.log(`${animal.name} is sleeping! Energy is now ${animal.energy}!`);
}
});
const eater = animal => ({
eat() {
animal.energy += 5;
console.log(`${animal.name} is eating! Energy is now ${animal.energy}!`);
}
});
const speaker = animal => ({
speak() {
animal.energy -= 3;
console.log(`${animal.name} has uttered something!`)
}
})
const Animal = (...args) => {
return (name, energy = 0) => {
const animal = {
name,
energy,
}
// this is where I am confused
const boundFunctions = args.map(func => {
return func.bind(animal)()
})
return Object.assign(animal, ...boundFunctions)
}
}
const Monkey = Animal(sleeper, eater)
const Tiger = Animal(sleeper, eater, speaker)
const Reggie = Monkey("Reggie");
const Tony = Tiger('Tony')
Reggie.sleep()
Tony.eat()
我希望每个实例化的动物都能参考自己的名字和能量。但它是不确定的。
这里没有理由使用bind
。行为函数只需要以动物作为参数调用,它们返回一个带有闭包的对象。用
const boundFunctions = args.map(func => func(animal))