2011-06-24 8 views
6

que tienen la siguiente funciónJavascript con el nuevo o no

var myInstance = (function() { 
    var privateVar = 'Test'; 

    function privateMethod() { 
    // ... 
    } 

    return { // public interface 
    publicMethod1: function() { 
     // all private members are accesible here 
     alert(privateVar); 
    }, 
    publicMethod2: function() { 
    } 
    }; 
})(); 

cuál es la diferencia si añado un nuevo a la función. De Firebug, parece que dos objetos son lo mismo. Y según tengo entendido, ambos deberían hacer cumplir el patrón 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() { 
    } 
    }; 
})(); 
+2

[? Lo que el "nuevo" palabra clave en JavaScript] (http://stackoverflow.com/questions/1646698/what -is-the-new-keyword-in-javascript) – mplungjan

Respuesta

7

Si bien el resultado final parece idéntico, cómo llegó allí y en qué se ejecutó es diferente.

La primera versión ejecuta la función anónima con this estar en el contexto del objeto window. La segunda versión ejecuta la función anónima, pero this está en el contexto de un nuevo objeto vacío.

Al final, ambos devuelven otro objeto (su Singleton). Es solo una pequeña diferencia en el contexto de ejecución.

Para probar esto, pero un justo antes de la declaración de la variable privateVar.

@Tom Squires: Eso no es necesariamente cierto y es una mala práctica no declarar sus variables. Una secuencia de comandos con la directiva "use strict"; no hacer que el motor de JS para quejarse (suponiendo que el motor soporta "use strict";

Cuestiones relacionadas