我一直在阅读使用工厂函数而不是类的好处,但是,我很难让它们以类似的方式工作。
例如,带有类:
class NumberManager {
constructor(numbers){
this.numbers = numbers;
}
removeNumber(input){
this.numbers = this.numbers.filter( number => number != input )
}
}
n = new NumberManager([1, 2])
n.numbers // --> [1, 2]
n.removeNumber(2)
n.numbers // --> [1]
但是,具有工厂功能:
const NumberFactory = (numbers) => {
const removeNumber = (input) => {
numbers = numbers.filter( number => number != input )
}
return {
numbers,
removeNumber
}
}
n = NumberFactory([1, 2])
n.numbers // --> [1, 2]
n.removeNumber(2)
n.numbers // --> [1, 2]
是否有可能具有类所具有的类似自由度(例如,轻松地改变属性),而不必使用诸如this
(可能会在执行上下文中中断)和new
(如果必须这样做可能会中断)之类的东西。将类转换为工厂)?
将要从工厂返回的对象放入变量,然后再返回它,然后可以引用并对该变量进行突变:
const NumberFactory = (numbers) => {
const removeNumber = (input) => {
instance.numbers = instance.numbers.filter( number => number != input );
};
const instance = { numbers, removeNumber };
return instance;
}
const n = NumberFactory([1, 2]);
console.log(n.numbers); // --> [1, 2]
n.removeNumber(2);
console.log(n.numbers); // --> [1]