Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Teh

Singleton Pattern

Recommended Posts

Bom galera,

 

olhei diversos materiais de oo javascript, e a primeira coisa que fui testar foi o pattern Singleton (o que garante apenas uma instancia da classe).

 

Está dando um erro que me intriga. Criei duas classes.

Script e Geral.

Em Script, eu pego uma instancia de Geral.

Em Geral, eu pego uma instancia de Script.

 

Ele entra em um loop ateh dar estouro de memoria. As chamadas entram em loop. Muito tosco. Vi diversos exemplos e tentei implementar com base neles. Vai aí o código:

 

Script.js

function Script(){
   this.geral = Geral.getInstance();
}

Script.instance = null;

Script.getInstance = function(){
   if(Script.instance == null){
      Script.instance = new Script();
   }
   return Script.instance;
}

Script.prototype.textoDaDiv = function(){
   return "Teste escrevendo na div...";   
}

Script.prototype.escrevernaDiv2 = function(){
   document.getElementById("minhaDiv2").innerHTML = this.geral.textoDaDiv2();
}

Geral.js

function Geral(){
   this.script = Script.getInstance();
}

Geral.instance = null;

Geral.getInstance = function(){
   if(Geral.instance == null){
      Geral.instance = new Geral();
   }
   return Geral.instance;
}

Geral.prototype.textoDaDiv2 = function(){
   return "Teste escrevendo na div2...";   
}

Geral.prototype.escreverNaDiv = function(){
   document.getElementById("minhaDiv").innerHTML = this.script.textoDaDiv();
}

index.html


<html>
<head>
   <title>Teste Singleton</title>
   <script type="text/javascript" src="Script.js"></script>
   <script type="text/javascript" src="Geral.js"></script>
</head>
<body>
   <div id="minhaDiv"></div>
    <div id="minhaDiv2"></div>
    <input type="button" value="Escrever na Div" onclick="javascript:Geral.getInstance().escreverNaDiv()" />
    <input type="button" value="Escrever na Div 2" onclick="javascript:Script.getInstance().escreverNaDiv2()" />
</body>
</html>

 

Alguém pode ajudar a fazer o Singleton de fato funcionar (garantir uma instancia apenas da classe e não dar estouro de pilha)? É um teste simples que eu fiz e NÃO FUNCIONA! Criei dois botões, onde eles chamam métodos que estão nas classes distintas. Bem simples. Para testar mesmo. E sempre dá falta de memória (ie) e too much recursion (firefox). Não sei se estou fazendo algo errado.

 

Só pra constar, eu uso o Firebug (para o firefox) e o ms script editor (para o ie).

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara.. vai dar loop mesmo, reflita comigo.

 

quando você chama Geral.getInstance() é executado a função Geral que chama a Script.getInstance() que chama a funcão Script que chama de novo Geral.getInstance(); que chama mais uma vez a função Geral.............infinito

 

logo LOOP pq isso ?

 

quando você colocou por exemplo a funcão Geral e chamou assim Geral.getInstance() é chamado a funcão Geral e a getInstance..

 

entendeu ? entendendo isso você arruma e faz funfar =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.