繁体   English   中英

Javascript:模块模式与构造函数/原型模式?

[英]Javascript: Module Pattern vs Constructor/Prototype pattern?

我想知道模块模式或Constructor / protoType模式是否更适用于我的工作。

基本上我使用的是不引人注目的javascript - HTML文档引用了.js文件。

我对模块模式的理解:

  • 调用INIT方法(基本上是一个我可以使用模块模式创建和返回的公共方法)
  • 在INIT方法中,分配所有点击事件等。

这听起来像是我情况的完美模式,因为我不需要创建对象和继承层次结构等。

我对构造函数/原型模式的理解:

  • 用于创建对象
  • 用于继承(即超类型的子类型)

我是否正确,为了提供不引人注目的javascript,模块模式是理想的?

构造函数和原型是实现类和实例的合理方法之一。 它们与该模型并不完全对应,因此您通常需要选择特定的方案或辅助方法来实现原型方面的类。 关于JS中类的一些背景知识 。)

模块模式通常用于命名空间,您可以在其中使用单个实例作为存储来对相关的函数和对象进行分组。 这与原型设计有利的用例不同。 他们并没有真正相互竞争; 你可以非常高兴地将两者结合使用(例如,在模块中放置构造函数并说出new MyNamespace.MyModule.MyClass(arguments) )。

模块模式比原型更容易,更优雅。 但是,首先考虑移动。 它不是中/大对象的相关模式,因为初始化需要在开始之前解析整个块。 多个闭包还创建了垃圾收集器不会释放的循环依赖(特别是IE),它导致更大的内存占用空间,直到窗口(或选项卡)关闭时才释放 - 检查chrome任务管理器进行比较 - 加载时间是反向的使用模块模式与对象大小成比例,而原型继承不是这种情况。 上述声明通过多个基准验证,例如: http//jsperf.com/prototypal-performance/54

如上次测试所示。 最好将小对象初始化为普通对象(没有这些模式)。 它适用于不需要封闭或继承的单个对象。 评估您是否需要这些模式是明智的。

您可以尝试折叠模式,这是一个链接: Javascript折叠模式

我还给出了一个类似问题的答案,其中显示了如何使用折叠模式:

折叠模式的简单示例

原型模式有助于我们扩展功能,并且无论对象的数量如何,内存中只有一个函数实例。 在Module模式中,每个对象在内存中创建一个新的函数实例,但它提供了私有/公共变量的概念,并有助于封装变量和函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM