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

时间:2016-10-21 00:04:18

标签: javascript templates object inheritance prototype

据我所知,在Javascript中,原型可用于提供一种实现继承,这对于开发人员来说非常有用,可以定义对象,这些对象是对类似类型的更通用对象的改进。 (例如,车辆< -Car / Vehicle< -Bike)

但是我应该将原型用于以下场景......

  1. 应用程序使用户能够创建和编辑过滤器"。

  2. "过滤器"是什么并不重要。除了具有以下特征之外,是或是否存在。

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

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

    c)由此创建的过滤器可以定义其自身,部分或全部值。

    d)过滤器未明确定义的任何值都来自过滤器的模板。模板上没有的任何模板来自模板的模板,依此类推。如果祖先的值发生变化,则所有不为该属性定义自己值的后代将反映祖先的更改值。 (< - 这就是为什么我在思考原型 - 他们已经这样做了!)

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

  4. 那么,利用已经给我b)c)和d)中描述的功能的Javascript原型是一种好习惯吗?或者我应该使用指向其他对象的指针定义自己的对象系统,并以某种方式处理所有继承规则?

    我怀疑的原因是......

    现在想象一下,过滤器也有不同的类型。我可以看到,很容易就是使用原型的情况,其中不同类型的过滤器由开发人员定义"继承"来自更通用的原型,并包含其他属性和更具体类型的独特方法。 (例如,过滤< -ColorFilter< -InvertColors)

    确定。所以,如果我将原型用于过滤器"模板"过滤器"类型"的原型,然后继承链可能是服务于两种不同目的的原型的大混合,即

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

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

    糟糕的做法?不重要吗?好的解决方案问题没有明确解释? 请指教,谢谢!

1 个答案:

答案 0 :(得分:1)

您要实现的目标(通常是过滤器)是由Composite Design Pattern实施的合适人选。

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

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