在构造函数中创建函数会比引用原型函数使用更多内存吗?

时间:2010-06-26 00:52:05

标签: javascript browser memory-management function closures

  

可能重复:
  JavaScript: Setting methods through prototype object or in constructor, difference?

我想这是一个关于浏览器实现闭包的问题。我知道在JavaScript中模拟类类功能的众多方法,包括使用各种库。这是一个关于资源的问题。

以这种方式创建函数每次调用时都会创建public_function函数的新副本吗?基本问题是:这样做是否比将函数添加到MyObject.prototype使用更多RAM?

function MyObject(){
  this.public_function = function(){
    //... do something
  }
}

2 个答案:

答案 0 :(得分:2)

如果不出意外,这需要new MyObject()创建的每个对象上的插槽,而不是原型上的单个插槽。

但是当然,其他东西:匿名函数创建一个闭包,捕获定义它的范围。同样,必须将存储为MyObject创建的每个对象

这实际上是否重要取决于你创建的对象数量......

另见:

  

答案 1 :(得分:0)

对于具有多个实例的类,构造函数中定义的匿名函数将为每个实例创建一个新的函数副本。

不使用原型的另一种方法是定义静态函数并将其分配给成员。例如:

function A(){
    this.hello = Hello;
}

function Hello(){
    alert('hello');
}