2012-05-22 188 views
0

我正试图用下面的方式来编写JS模块。在内存和CPU上编写模块有什么意义。第二个会在浏览器中占用更多的内存吗?Javascript模块声明 - 性能

使用函数声明

function MyModule() { 
    this.getOperation1 = operation1; 
    function operation1() { 
     return "XYZ" 
    } 
} 

使用变量定义

var MyModule = { 
    getOperation1: function() { 
     return "XYZ" 
    } 
    } 
+0

的可能重复[面向对象的JavaScript最佳实践?](http://stackoverflow.com/questions/907225/object-oriented-javascript-best-practices) – antyrat

+0

我回顾了这个线程,它没有涵盖内存/ CPU角度的问题。 – tech20nn

+0

你最终想达到什么目的? – Tamil

回答

1

内存明智他们相同 - 无论是创建一个对象。

但是:

  1. 您只能使用new与基于功能模块的格式。后者只是创建单个对象,而不是可用于创建其他实例的构造函数。

  2. 使用函数可以将私有局部变量包含在作用域中。

然而,在大多数箱子更好的方法是这样的:

function MyModule() { 
} 

MyModule.prototype.getOperation1 = function() { 
    ... 
} 

保证,如果你创建多个实例,它们都只是份额一个getOperation1功能的副本。这就是说,如果你所要做的只是命名空间的功能,而且它们不会自然地形成一个“对象”(在OOP意义上),那么你也可以使用对象文字语法。

1

请参阅本yui-blog内存相关参数

从同一

通过使用新的调用功能,对象保存到一个毫无价值的 原型对象。这废物存储不抵消的优势。如果 我们不使用新的,我们不把浪费的原型对象 链

正如@Alnitak提到利用prototype对象的柜面你是多达实现constructor功能,使所有实例会共享相同的对象。

要检查CPU明智[速度]使用www.jsperf.com并做一个性能测试。一些已经可用的测试 Function InvocationObject.create vs newGeneric