【问题标题】:Should I use JavaScript prototypes in this situation?在这种情况下我应该使用 JavaScript 原型吗?
【发布时间】:2016-10-21 00:04:18
【问题描述】:

我了解在 Javascript 中,原型可用于提供一种实现继承,这对于开发人员定义对象是有用的,这些对象是类似“类型”的更通用对象的改进(例如车辆

但是我应该在以下场景中使用原型吗...

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

  2. 除了具有以下特征之外,“过滤器”是什么或做什么并不重要。

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

    b) 可以通过将另一个过滤器用作“模板”来创建过滤器(在“子”过滤器上保留对它的引用)。

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

    d) 过滤器未明确定义的任何值均取自过滤器的模板。任何不在模板上的都来自模板的模板,依此类推。如果祖先的值发生变化,所有没有为该属性定义自己的值的后代将反映祖先的变化值。 (

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

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

我有疑问的原因是这个……

现在想象一下也有不同的类型过滤器。我可以很容易地看到使用原型的情况,其中不同类型的过滤器由开发人员定义“继承”更通用的原型,并包含更具体类型独有的附加属性和方法。 (例如滤镜

好的。因此,如果我将原型用于过滤器“模板”以及用于过滤器“类型”的原型,那么继承链可能会是服务于 2 个不同目的的原型的大混合,即

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

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

不好的做法?没关系?更好的解决方案?问题没有解释清楚? 请指教,谢谢!

【问题讨论】:

    标签: javascript templates object inheritance prototype


    【解决方案1】:

    您想要实现的(通常是过滤器)是由Composite Design Pattern 实现的一个很好的候选对象。

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

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

    【讨论】:

    • 谢谢!我会在接受答案之前查看链接。
    • 澄清一下……您是否建议使用复合模式来处理过滤器及其模板的用户定义结构,并使用 JS 原型来实现开发人员定义的过滤器类型对象层次结构?反之亦然,还是两者都用?
    • 两者都应该可以。
    • 你能实现这个吗?
    • 既然我已经实现了一个解决方案,我将再仔细看看复合模式,它可能对我来说变得更清楚,或者我可能在不知不觉中实现了它而没有意识到 :-) 谢谢再次为您的时间,接受了这个答案。
    猜你喜欢
    • 2011-01-17
    • 2022-07-22
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2010-09-05
    • 2017-05-09
    相关资源
    最近更新 更多