2010-04-05 13 views
7

¿Hay alguna consideración para determinar cuál es una mejor práctica para crear un objeto con miembros privados?Javascript nuevo objeto (función) vs invocación en línea

var object = new function() { 
    var private = "private variable"; 
    return { 
     method : function() { 
      ..dosomething with private; 
     } 
    } 
} 

VS

var object = function() { 
... 
}(); 

Básicamente lo que es la diferencia entre el uso de nuevo aquí, y simplemente invocar la función inmediatamente después de la definimos?

+0

[Nunca uses 'nueva función() {...}'!] (Http://stackoverflow.com/a/10406585/1048572) Es cierto que en este caso particular en el que 'devuelve' la función no es * tan * malo. – Bergi

Respuesta

9

El operador new hace que la función se invoque como Constructor Function.

He visto ese patrón antes, pero no veo ningún beneficio de usarlo.

El propósito del operador new es crear un objeto (el valor this dentro del constructor), estableciendo la propiedad interna derecha [[Prototype]], para construir la cadena prototipo y poner en práctica la herencia (se puede ver los detalles en el [[Construct]] operación).

Yo recomendaría que se quede con el patrón de invocación en línea.

+0

Si bien estoy de acuerdo con CMS porque está utilizando un patrón de módulo revelador y confiando en el alcance léxico, aclararía que 'nuevo' es apropiado cuando se crea un objeto tipo basado en un patrón de prototipo, por ejemplo, un modelo o vista BackboneJS. – bjnsn

1

Si está utilizando funciones como controladores de eventos, puede tener pérdidas de memoria. Eche un vistazo a algunos de los articles

1

Esta link proporciona estadísticas que también confirman que el patrón de invocación en línea es mejor.

Tenga en cuenta que la medición está en operations per second el que cuanto más alto mejor

Cuestiones relacionadas