我正在为产品构建一个系列的概念,其中成员属于不同类型(accountHolder
、payingCustomer
、student
等)。最初我将它们FamilyMember
构建为.student
payingCustomer
accountHolder
鉴于对象组合在 JS 中被广泛吹捧为一个好主意,我决定走这条路。accountHolder
但是,如果属性属于另一个对象类型(例如),则特定对象类型(例如)的方法不能访问实例化对象的属性student
。
为了使这更客观,我决定使用以下代码复制该行为:
const person = (props) => {
let state = {
name: props.name,
}
state.isOfAge = () => {
// state.isAdult is always undefined because
// isAdult doesn't exist in this object
return state.isAdult === true
}
return state
}
const adult = (props) => {
return {
isAdult: true,
}
}
const factory = (props) => {
return Object.assign({}, person(props), adult(props))
}
const john = factory({
name: 'John',
})
console.clear()
console.log(john) // { isAdult: true, name: "John", isOfAge... }
console.log(john.isOfAge()) // false
我期待john
's 方法isOfAge
能够访问 property isAdult
,因为它在对象中。但是,从概念上讲,我理解它为什么不起作用:isOfAge
是 的方法state
,而不是结果adult
实例。
如果我使用类甚至是传统的原型/构造器机制,我知道如何使其工作(例如附加到prototype
)。对于对象组合,我不知道如何到达那里,可能是由于缺乏 FP 经验。
谢谢您的帮助!