Javascript:模块模式vs构造函数/原型模式?
我想知道模块模式或Constructor / protoType模式是否更适用于我的工作。
基本上我使用不引人注意的JavaScript – HTML文件有一个对.js文件的引用。
我对模块模式的理解:
- 调用一个INIT方法(这基本上是一个公共方法,我可以使用模块模式创build和返回)
- 在INIT方法中,分配所有的点击事件等
这听起来像是我的情况的完美模式,因为我不需要创build对象和inheritance层次结构等。
我对构造函数/原型模式的理解:
- 用于创build对象
- 为了使用inheritance(即超types的子types)
我是正确的,提供不显眼的JavaScript,模块模式是理想的?
构造函数和原型是实现类和实例的合理方法之一。 他们并不完全对应于这个模型,所以你通常需要select一个特定的scheme或辅助方法来实现原型方面的类。 ( 在JS中的类的一些背景 。)
模块模式通常用于命名空间,在这里你将有一个实例作为一个存储来分组相关的函数和对象。 这与原型devise的好处是不同的。 他们并不真正相互竞争。 你可以很高兴地一起使用它们(例如,在模块中放置一个构造函数,并说new MyNamespace.MyModule.MyClass(arguments)
)。
模块模式比原型更容易和更优雅。 但是,首先想到移动。 这对中型/大型对象来说不是相关的模式,因为初始化需要在开始之前parsing整个块。 多个闭包还创build了循环依赖,垃圾收集器不释放(特别是IE),它会导致更大的内存占用不释放,直到窗口(或标签)closures – 检查铬任务pipe理器比较 – 加载时间是相反的与使用模块模式的对象大小成比例,而原型inheritance则不是这种情况。 上面的声明是通过多个基准来validation的,例如: http : //jsperf.com/prototypal-performance/54
正如上次testing中所见。 小对象最好是初始化为普通对象(没有这些模式)。 它适用于不需要closures和inheritance的单个对象。 评估你是否需要这些模式是明智的。
你可以尝试折叠模式,这里有一个链接: Javascript折叠模式
我还留下了一个类似的问题的答案,它显示了如何使用折叠模式:
折叠模式的简单例子
原型模式可以帮助我们扩展function,不pipe对象的数量如何,只有一个函数实例在内存中。 在模块模式中,每个对象在内存中创build一个新的函数实例,但它提供了私有/公共variables的概念,并有助于封装variables和函数。