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

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

基本上我使用不显眼的JavaScript - HTML文档有一个对.js文件的引用。

我对模块模式的理解:

  • 调用一个INIT方法(这基本上是一个公共方法,我可以使用模块模式创建和返回)
  • 在INIT方法中,分配所有点击事件等。
  • 这听起来像是我的情况的完美模式,因为我不需要创建对象和继承层次结构等。

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

  • 用于创建对象
  • 为了使用继承(即超类型的子类型)
  • 我是否正确,为了提供不引人注意的JavaScript,模块模式是理想的?


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

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


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

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


    你可以尝试折叠模式,这里有一个链接:Javascript折叠模式

    我还留下了类似问题的答案,该答案显示了如何使用折叠图案:

    折叠图案的简单例子

    链接地址: http://www.djcxy.com/p/50129.html

    上一篇: Javascript: Module Pattern vs Constructor/Prototype pattern?

    下一篇: Simple javascript inheritance using $.extend and module pattern