0

我正在尝试在以下编写 JS 模块的方式之间做出决定。在内存和 CPU 上编写模块有什么影响。第二个会在浏览器中占用更多内存吗?

使用函数声明

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

使用变量定义

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

2 回答 2

1

内存方面它们大致相同 - 都创建一个对象。

然而:

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

  2. 使用函数,您可以将私有局部变量包含在范围内。

但是,在大多数情况下,更好的方法是:

function MyModule () {
}

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

这确保了如果您创建多个实例,它们都只共享该函数的一个副本。getOperation1

也就是说,如果您要做的只是命名函数,并且它们不会自然地形成“对象”(在 OOP 意义上),那么您不妨使用对象文字语法。

于 2012-05-22T12:32:43.437 回答
1

请参阅此yui-blog以获取与内存相关的参数

来自同一个

通过使用 new 调用函数,对象持有一个毫无价值的原型对象。这会浪费内存而没有抵消优势。如果我们不使用新的,我们就不会将浪费的原型对象保留在链中

正如@Alnitak 所提到的,使用prototype对象以防您要实现constructor功能,以便所有实例共享同一个对象。

要检查 CPU 方面的 [速度],请使用 www.jsperf.com 并进行性能测试。一些已经可用的测试 Function Invocation , Object.create vs new , Generic

于 2012-05-22T12:44:52.597 回答