Javascript com new ou não
Eu tenho a seguinte função
var myInstance = (function() {
var privateVar = 'Test';
function privateMethod () {
// ...
}
return { // public interface
publicMethod1: function () {
// all private members are accesible here
alert(privateVar);
},
publicMethod2: function () {
}
};
})();
Qual é a diferença se eu adicionar um novo à função. Pelo Firebug, parece que os dois objetos são iguais. E, pelo que entendo, ambos deveriam aplicar o padrão singleton.
var myInstance = new (function() {
var privateVar = 'Test';
function privateMethod () {
// ...
}
return { // public interface
publicMethod1: function () {
// all private members are accesible here
alert(privateVar);
},
publicMethod2: function () {
}
};
})();
Resposta #1
Embora o resultado final pareça idêntico, como ele chegou lá e o que foi executado é diferente.
A primeira versão executa a função anônima com this estando no contexto do objeto window. A segunda versão executa a função anônima, mas this está no contexto de um novo objeto vazio.
No final, ambos retornam outro objeto (seu Singleton). É apenas uma pequena diferença no contexto de execução.
Para testar isso, coloque um alert(this); logo antes da declaração da variável privateVar.
@Tom Squires: Isso não é necessariamente verdade e é uma prática ruim não declarar suas variáveis. Um script com a diretiva "use strict"; faz com que o motor de JS reclame (assumindo que o motor suporte "use strict";