Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理兄弟继承问题?_Javascript_Node.js_Class_Oop_Ecmascript 6 - Fatal编程技术网

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()
这是一个实现细节,不应替代/隐藏/覆盖正确的玩具领域建模。