Javascript:自调用单例函数vs创建函数的实例?

问题描述:

哪一个是更好地在JavaScript中透出模块化模式来实现:Javascript:自调用单例函数vs创建函数的实例?

  1. 有自调用函数,这将在JS被渲染的时间内得到intialized只有一次,就像这样:

<div id="output"> 
 
</div> 
 

 
<script> 
 
    var calculator = function() 
 
{ 
 
     add = function(x,y){ 
 
      return x+y; 
 
     };   
 
     return { add:add }; 
 
}(); 
 

 
document.getElementById("output").innerHTML = calculator.add(5,3);; 
 

 

 
</script>
---- ----- OR

  1. 有一个构造做此类似:
  2. <div id="output"> 
     
    </div> 
     
    
     
    <script> 
     
        var calculator = function() 
     
        { 
     
         add = function(x,y){ 
     
          return x+y; 
     
          }; 
     
          return { add:add }; 
     
        }; 
     
        document.getElementById("output").innerHTML = new calculator().add(5,3); 
     
    </script>

    在1日,好处我读的是每个函数只会被初始化一次,而在2日,我们将有一个功能副本初始化每个对象。

    但是,第一个问题是,它会做一些工作,使JS加载时间内的单一副本。

    我很困惑为什么我们在case2的内存中有多个函数副本,因为内存应该分配给变量而不是函数。

    以下哪两种方法是正确的以及如何决定在何时选择?

开始=>
+0

第一个模式相当于单例模式。如果您想分享一些资源,您可以使用模块化模式创建单个实例,并让每个人都使用该实例。例如数据库连接 – marvel308

+0

@ marvel308:内存分配情况如何?内存如何分配给这两个? – maverick

+0

我建议通过https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management。并阅读新关键字如何分配内存和垃圾回收 – marvel308

3)一个简单的js对象? :

var calculator = { 
    add(a,b){ 
    return a+b; 
    } 
}; 

alert(calculator.add(1,2)) 

正如你既不想多个实例(其中,第二种方法是好的)和你将没有私有变量(一个封闭的好),上可能是要走的路。

+0

我已经过分简化了情况..我只需要在此对象中只公开几个功能,所以返回将需要。我将编辑该问题。 – maverick

+0

我只想了解内存分配如何在1,2或3中工作,以便我可以在需要时选择这些内存 – maverick

+0

@maverick well 2实际上不是构造函数,而是工厂。 –