我应该在这种情况下使用JavaScript原型吗?
Should I use JavaScript prototypes in this situation?
我明白,在Javascript中,原型可以用来提供一种实现继承,这对于开发人员定义类似"类型"的更通用对象的细化对象是有用的(例如:Vehicle<-Car/Vehicle<-Bike)
但是我应该为下面的场景使用原型吗…
-
应用程序为用户提供了创建和编辑"过滤器"的能力。
-
"过滤器"是什么或做什么并不重要,重要的是它具有以下特征:
a)每个过滤器都是一个对象,与其他过滤器具有完全相同的属性(和方法)。
b)可以通过使用另一个过滤器作为"模板"来创建过滤器(在"子"过滤器上保留对其的引用)。
c)这样创建的过滤器可以不定义自己的值,也可以定义部分或全部自己的值。
d)任何没有被过滤器显式定义的值都是从过滤器的模板中获取的。任何不在模板上的都来自模板的模板,以此类推。如果祖先的值发生了变化,所有没有为该属性定义自己值的后代都将反映祖先的变化值。(<-这就是为什么我在考虑原型-他们已经这样做了!)
-
有必要向用户指出哪些属性是从模板过滤器继承的,哪些属性是在过滤器本身上设置的。
所以,利用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/
- 使用“;这个“;JavaScript原型方法中的关键字
- 如何从对象的原型方法访问JavaScript对象属性
- Node.js中的JavaScript原型对象效率
- 为什么要返回'这'在导致循环的JavaScript原型中
- 原型和用法 Javascript
- JavaScript对象不是从原型链继承的
- javascript对象原型与jquery冲突
- 原型Javascript中的错误“;类别“-不是函数和未定义的变量
- 从字符串原型javascript获取字符串值
- 原型JavaScript Event.observe-如何观察可能存在或不存在的元素
- 与原型javascript冲突
- 为什么原型JavaScript在这种情况下不起作用
- 使用原型JavaScript - 最佳实践
- 添加到另一个原型实例的原型:JavaScript
- 函数.原型Javascript
- 如何在选定的原型javascript中更新基于第一选择框的第二选择
- 原型Javascript框架-获取PHP响应
- 如何访问类原型Javascript中定义的事件处理程序中的类成员变量
- 原型 javascript 不显眼的点击事件添加到按钮
- 字符串vs数组原型Javascript