我应该在这种情况下使用JavaScript原型吗?

Should I use JavaScript prototypes in this situation?

本文关键字:原型 JavaScript 这种情况下 我应该      更新时间:2023-09-26

我明白,在Javascript中,原型可以用来提供一种实现继承,这对于开发人员定义类似"类型"的更通用对象的细化对象是有用的(例如:Vehicle<-Car/Vehicle<-Bike)

但是我应该为下面的场景使用原型吗…

  1. 应用程序为用户提供了创建和编辑"过滤器"的能力。

  2. "过滤器"是什么或做什么并不重要,重要的是它具有以下特征:

    a)每个过滤器都是一个对象,与其他过滤器具有完全相同的属性(和方法)。

    b)可以通过使用另一个过滤器作为"模板"来创建过滤器(在"子"过滤器上保留对其的引用)。

    c)这样创建的过滤器可以不定义自己的值,也可以定义部分或全部自己的值。

    d)任何没有被过滤器显式定义的值都是从过滤器的模板中获取的。任何不在模板上的都来自模板的模板,以此类推。如果祖先的值发生了变化,所有没有为该属性定义自己值的后代都将反映祖先的变化值。(<-这就是为什么我在考虑原型-他们已经这样做了!)

  3. 有必要向用户指出哪些属性是从模板过滤器继承的,哪些属性是在过滤器本身上设置的。

所以,利用Javascript的原型是好的做法,它已经给了我在b) c)和d)中描述的功能?或者我应该定义自己的对象系统,用指针指向其他对象,并以某种方式自己处理所有继承规则?

我有疑问的原因是……

现在假设还有不同的类型的过滤器。我可以看到,这很容易成为使用原型的一种情况,其中由开发人员定义的不同类型的过滤器"继承"来自更通用的原型,并包含额外的属性&方法对更特定的类型是唯一的。(例如Filter<-ColorFilter<-InvertColors)

Ok。因此,如果我要使用过滤器"模板"的原型和过滤器"类型"的原型,那么继承链就可能是一个巨大的混合原型,服务于两种不同的目的,例如

1) 用户定义的过滤器模板继承链,

2)开发人员定义的过滤器类型继承链。

坏实践?不重要吗?更好的解决方案吗?没有解释清楚的问题?请指教,谢谢!

您想要达到的目标(通常是过滤器)是由复合设计模式实现的一个很好的选择。

这可以在JavaScript中轻松实现。以下是一些带有示例源代码的文章:

http://www.dofactory.com/javascript/composite-design-patternhttps://www.joezimjs.com/javascript/javascript-design-patterns-composite/