Supongo que usar este patrón es el nuevo picor, pero no entiendo cuál es la ventaja y no entiendo las implicaciones del alcance.¿Qué ventajas otorga el uso (función (ventana, documento, indefinido) {...}) (ventana, documento)?
El patrón:
(function(window, document, undefined){
window.MyObject = {
methodA: function() { ... },
methodB: function() { ... }
};
})(window, document)
así que tengo varias preguntas sobre esto.
¿Hay alguna ventaja especial en encapsular un objeto como este?
¿Por qué se alimenta ventana y documento en lugar de solo acceder a ella normalmente?
¿Por qué diablos está pasando undefined
?
¿Es una buena idea asociar el objeto que estamos creando directamente a la ventana?
Estoy acostumbrado a lo que llamaré el estilo de Crockford de la encapsulación de Javascript (porque lo saqué de los videos de Douglas Crockford Javascript).
NameSpace.MyObject = function() {
// Private methods
// These methods are available in the closure
// but are not exposed outside the object we'll be returning.
var methodA = function() { ... };
// Public methods
// We return an object that uses our private functions,
// but only exposes the interface we want to be available.
return {
methodB: function() {
var a = methodA();
},
methodC: function() { ... }
}
// Note that we're executing the function here.
}();
¿Uno de estos patrones es funcionalmente mejor que el otro? ¿El primero es una evolución del otro?
respuesta en dos palabras: almacenamiento en caché + espacio aislado; para más detalles, consulte a continuación;) – Christoph
Consulte también [¿Cómo funciona esta sintaxis JavaScript/JQuery: (función (ventana, indefinido) {}) (ventana)?] (http://stackoverflow.com/questions/2716069/how- does-this-javascript-jquery-syntax-work-function-window-undefined) – Bergi