Javascript 如何处理兄弟继承问题?
我有一个处理查找/保存项目的基类。为了降低Javascript 如何处理兄弟继承问题?,javascript,node.js,class,oop,ecmascript-6,Javascript,Node.js,Class,Oop,Ecmascript 6,我有一个处理查找/保存项目的基类。为了降低save函数的复杂性(因为它使用insert或update取决于它是否被保存),我认为最好将它分成两个类,因为我的许多其他方法(这里没有写)取决于它是否被保存。这是一个简单的例子: class项目库{ 构造函数(initData){ this.data=initData } 查找(id){ const found=Model.find(this.data) 返回新的SavedItemBase(已找到) } 保存(){ const saved=this.i
save
函数的复杂性(因为它使用insert
或update
取决于它是否被保存),我认为最好将它分成两个类,因为我的许多其他方法(这里没有写)取决于它是否被保存。这是一个简单的例子:
class项目库{
构造函数(initData){
this.data=initData
}
查找(id){
const found=Model.find(this.data)
返回新的SavedItemBase(已找到)
}
保存(){
const saved=this.insert(this.data)
返回新的SavedItemBase(已保存)
}
插入(){}
更新(){}
}
class SavedItemBase扩展了ItemBase{
保存(){
this.update()
还这个
}
}
玩具:
类玩具扩展了ItemBase{
构造函数(){
this.name=123
这个.id=456
}
someMethod(){}//如果我返回一个新的SavedItemBase,这将丢失
}
玩具的问题在于它只扩展了项
。如果我在父类项
中返回一个新的SavedItem
,则原始的玩具
类将丢失。以下是我的问题的图片:
当玩具从
Base
返回时,我如何让玩具返回自身的SavedItemBase
实例,而不重写Toy
(例如SavedToyBase
)的类?或者有更好的方法来实现这一点吗?那么,您希望SavedItemBase
仅在玩具对象继承链中保存它吗?因此,当第一次创建玩具时,它不是SavedItemBase
?是的,确切地说-我想在保存玩具后,或者当我找到它时,获取玩具的SavedItemBase
。项目库
(以及继承它的玩具
)本质上是一个尚未保存到任何数据库的蓝图Save(thisttoy)
和find(theToy)
-这能起作用吗?将功能分解为一个单独的类好吧,它一直都在做——但不是作为继承链的一部分。这还有一个额外的好处,就是将对象类与数据库分离。作为一个“玩具域”设计问题,SavedItemBase
对我来说没有意义(这里给出了简化的代码)。它作为玩具
对象的定义状态是有意义的。因此,拥有一个ItemBase.isSaved
属性或方法……本质上是一个蓝图。其保存状态是否使其成为“蓝图”或将其从“蓝图”更改?然后Toy
API应该表示将其制作/转换为蓝图。save()
这是一个实现细节,不应替代/隐藏/覆盖正确的玩具领域建模。