1. Descripción general de funciones anónimas
La primera vez que supe sobre las funciones anónimas fue en el código fuente de jquery. Lo primero que vi cuando abrí jQuery fue.
Copie el código de código de la siguiente manera:
(función (ventana, indefinida) {.................................}) (ventana);
Esta es una función anónima, con parámetros en rojo. La función de la función anónima es crear un área cerrada, y el exterior no puede acceder a las variables y métodos internos.
Dado que no se puede acceder a él, ¿cómo se puede llamar a jquery? Esto se debe a que la función anónima de jquery tiene estas dos oraciones (texto azul):
Copie el código de código de la siguiente manera:
(función (ventana, indefinida) {
// Definir una copia local de jQuery
var jQuery = función (selector, contexto) {
// El objeto jQuery es en realidad sólo el constructor init 'mejorado'
devolver nuevo jQuery.fn.init (selector, contexto);
},
.........
ventana.jQuery = ventana.$ = jQuery;
})(ventana);
Resulta que jQuery se pasa a ventana en la función anónima, razón por la cual se pasa ventana al pasar parámetros, por lo que cada vez que se llama a jquery en el futuro, en realidad se llama al objeto jQuery de ventana.
jquery llama a sus propios métodos. No se puede llamar desde el exterior, lo que garantiza la seguridad y la ausencia de conflictos.
2. Continuando con el tema anterior, sobre los complementos de jQuery
Lo siguiente es parte del código para el control de paginación que escribí:
Copie el código de código de la siguiente manera:
;(función ($) {
$.fn.tabing = función (arg) {
instancia = nuevo complemento (este, arg);
};
var instancia = nulo;
complemento de función (elemento) {
this._tabs = $(elemento);
this._tabli = $("a[href*='#']",this._tabs);
this._tabDiv = this._tabs.siblings().filter("div[id*='tab']");
this.init();
}
Complemento.prototipo = {
inicio: función(){
this._tabli.addClass("no seleccionado");
this._tabli.eq(0).addClass("seleccionado");
this._tabDiv.css("display","none");
this._tabDiv.eq(0).css("mostrar","bloquear");
this._tabli.each(función(){
$(esto).bind("clic",función(){
for(var i = 0;i<instancia._tabDiv.length;i++){
instancia._tabDiv.eq(i).css("display","none");
}
instancia._tabDiv.filter("#"+$(this).attr("href").split('#')[1]).css("display","block");
});
})
}
}
})(jQuery);
Preste atención a las palabras en rojo. De hecho, los complementos de jQuery también escriben funciones anónimas, lo que garantiza la independencia de cada complemento. De lo contrario, no se denomina complemento. Las palabras en rojo $.fn.tabing. hay tabulación en este complemento para fn de jquery.
De esta manera, el objeto jquery externo puede llamar directamente a la tabulación, que también es el único contacto entre el complemento y el mundo exterior.
3. Después de hablar sobre el uso de funciones anónimas por parte del complemento jquery, hablemos de las funciones anónimas de la ventana.
De hecho, jquery en sí es la función anónima de la ventana. Este es el primer punto. Entonces, ¿cómo escribimos la función anónima de la ventana?
Es decir, después de escribir la función anónima, existe una interfaz para interactuar con la ventana en la función, como la siguiente:
Copie el código de código de la siguiente manera:
(función(){
función getObjByID(id){
devolver document.getElementById(id);
}
función __addClass(id,className,classValue){
$(id).style.className=classValue;
}
ventana.addClass=__addClass;
})();
Mire también las palabras en rojo, para que pueda llamar a addClass() fuera de la función anónima, pero no pueda llamar a getObjByID().
4. También se ejecutarán funciones anónimas durante el análisis.
como sigue:
Copie el código de código de la siguiente manera:
función Vídeo() { };
función Película() { };
var _video = nuevo vídeo();
_video.tamaño = 3;
_video.toString = función () {
devolver "vídeo";
};
_video.getName = función () {
devolver "VideoXXX";
};
var _movie = nueva película();
(función (padre, hijo) {
para (var ele en padre) {
if (!child[ele]) //Se copiará una copia del padre solo cuando el hijo no contenga el atributo o método.
niño[ele] = padre[ele];
}
})(_video, _movie); //Cómo llamar a una función anónima
alerta(_película.tamaño); //3
alert(_movie.toString()); //[objeto Objeto]
alert(_movie.getName()); //VideoXXX
Las tres alertas tienen resultados, lo que indica que la función anónima se ejecuta internamente.