Antes de mencionar los conceptos anteriores, primero quiero hablar sobre los parámetros implícitos de las funciones en JavaScript: argumentos
Argumentos
Este objeto representa los parámetros de la función que se está ejecutando y la función que la llama.
[función.]argumentos[n]
Función de parámetro: opciones. El nombre del objeto Función que se está ejecutando actualmente. n: opción. El índice basado en 0 del valor del parámetro que se pasará al objeto Función.
Descripción
Argumentos es un objeto oculto creado además de los parámetros especificados al llamar a una función. Los argumentos son un objeto que es similar a una matriz pero no a una matriz. Se dice que es similar a una matriz porque tiene las mismas propiedades y métodos de acceso que una matriz. Se puede acceder al valor del parámetro único correspondiente a través de argumentos. n], y tiene el atributo de longitud de matriz longitud. Además, el objeto de argumentos almacena los parámetros realmente pasados a la función, sin limitarse a la lista de parámetros definida por la declaración de la función, y el objeto de argumentos no se puede crear explícitamente. El objeto de argumentos solo está disponible al comienzo de la función. El siguiente ejemplo detalla estas propiedades:
//Uso del objeto de argumentos.
función ArgPrueba(a, b){
var i, s = "Se esperaba la función ArgTest";
var numargs = argumentos.length // Obtiene el valor del argumento pasado.
var expargs = ArgTest.length; // Obtiene el valor del parámetro esperado.
si (expargs < 2)
s += expargs + " argumento. ";
demás
s += expargs + " argumentos. ";
si (numargs < 2)
s += numargs + "fue aprobado.";
demás
s += numargs + "fueron pasados.";
s += "nn"
for (i =0; i < numargs; i++){ // Obtener el contenido del parámetro.
s += " Arg " + i + " = " + argumentos[i] + "n";
}
return(s); // Devuelve la lista de parámetros.
}
Se agregó aquí un código que indica que los argumentos no son una matriz (clase Array):
Array.prototype.selfvalue = 1;
alerta (nueva matriz (). Valor propio);
función pruebaAgumentos(){
alerta (argumentos.valor propio);
}
Ejecute el código y encontrará que la primera alerta muestra 1, lo que significa que el objeto de matriz tiene un atributo de valor propio con un valor de 1. Cuando llame a la función testAguments, encontrará que se muestra "indefinido", lo que indica que no es un atributo de los argumentos. Es decir, los argumentos no son un objeto de matriz.
llamador
Devuelve una referencia a la función que llamó a la función actual.
nombredefunción.llamador
El objeto functionName es el nombre de la función ejecutada.
Tenga en cuenta que para las funciones, el atributo de la persona que llama solo se define cuando se ejecuta la función. Si la función se llama desde el nivel superior, la persona que llama contiene nulo. Si el atributo de la persona que llama se usa en un contexto de cadena, el resultado es el mismo que functionName.toString, es decir, se muestra el texto descompilado de la función.
El siguiente ejemplo ilustra el uso del atributo de llamador:
// demostración de llamador {
función que llamaDemo() {
si (callerDemo.caller) {
var a= callerDemo.caller.toString();
alerta(a);
} demás {
alert("esta es una función superior");
}
}
función handleCaller() {
llamadaDemo();
}
la persona que llama
devuelve el objeto Función que se está ejecutando, que es el cuerpo del objeto Función especificado.
[función.]argumentos.callee
El parámetro de función opcional es el nombre del objeto Función que se está ejecutando actualmente.
Tenga en cuenta que
el valor inicial del atributo de la persona que llama es el objeto Función que se está ejecutando.
El atributo de la persona que llama es un miembro del objeto de argumentos. Representa una referencia al objeto de función en sí, lo cual es beneficioso para la recursividad de funciones anónimas o para garantizar la encapsulación de funciones. Por ejemplo, el siguiente ejemplo calcula de forma recursiva la suma de las naturales. números del 1 al n. Esta propiedad solo está disponible cuando se está ejecutando la función correspondiente. También cabe señalar que el destinatario tiene un atributo de longitud, que a veces es mejor para la verificación. arguments.length es la longitud real del parámetro y arguments.callee.length es la longitud del parámetro formal. A partir de esto, puede determinar si la longitud del parámetro formal es consistente con la longitud real del parámetro durante la llamada.
Ejemplo
//el destinatario puede imprimirse
función calleeDemo() {
alerta(argumentos.callee);
}
//Se utiliza para verificar parámetros
function calleeLengthDemo(arg1, arg2) {
if (argumentos.longitud==argumentos.callee.length) {
window.alert("¡Verifique que las longitudes de los parámetros formales y reales sean correctas!");
devolver;
} demás {
alert("Longitud real del parámetro: " +argumentos.length);
alert("Longitud del parámetro formal: " +argumentos.callee.length);
}
}
//cálculo recursivo
var suma = función(n){
si (n <= 0)
devolver 1;
demás
devolver n + argumentos.callee(n - 1)
}
Una función recursiva más general:
var sum = function(n){
si (1==n) devuelve 1;
de lo contrario, devuelve n + suma (n-1)
Al llamar: alerta(suma(100));
La función contiene una referencia a la suma misma. El nombre de la función es solo un nombre de variable. Llamar a suma dentro de la función es equivalente a llamar a una variable global. No puede reflejar bien que se está llamando a sí misma. comparación. Buen enfoque.
aplicar y llamar
son vincular una función a otro objeto para su operación. La única diferencia entre ellas es la forma de definir los parámetros:
apply(thisArg,argArray
call(thisArg[,arg1,arg2...]) ;
Es decir, al puntero this dentro de todas las funciones se le asignará el valor de thisArg, lo que puede lograr el propósito de ejecutar la función como un método de otro objeto.
La explicación de Apply
es que si argArray no es una matriz válida o no es un argumento. objeto, causará un TypeError.
Si no se proporcionan argArray ni thisArg, el objeto Global se utilizará como thisArg.
y no se pueden pasar parámetros.
Descripción de la llamada
El método de llamada cambia el contexto del objeto de una función desde el contexto inicial al nuevo objeto especificado por thisArg.
Si no se proporciona el parámetro thisArg, entonces el objeto global se usa como thisArg.
Consejos relacionados:
Hay otro truco al aplicar call y apply Es decir, después de usar call y apply para aplicar otra función (clase), la función actual ( clase) estarán disponibles. Los métodos o propiedades de otra función (clase) también se pueden llamar "herencia". Mire el siguiente ejemplo:
// Demostración de herencia
base de función() {
this.member = "dnnsun_Member";
este.método = función() {
ventana.alert(este.miembro);
}
}
función extender() {
base.call(esto);
ventana.alert(miembro);
ventana.alert(este.método);
}
Como se puede ver en el ejemplo anterior, extend puede heredar los métodos y propiedades de base después de llamar.
Por cierto, aplicar se utiliza en el prototipo del marco de JavaScript para crear un patrón
que define una clase. El código de implementación es el siguiente:
var Clase = {.
crear: función() {
función de retorno() {
this.initialize.apply(esto, argumentos);
}
}
}
Análisis: Desde el punto de vista del código, este objeto solo contiene un método: Crear, que devuelve una función, es decir, una clase. Pero este también es el constructor de la clase, que llama a inicializar, y este método es la función de inicialización definida cuando se crea la clase. De este modo,
Puede implementar el ejemplo del modo de creación de clases en prototipo
:
var vehículo=Class.create();
vehículo.prototipo={
inicializar: función (tipo) {
this.type=tipo;
}
mostrarSelf:función(){
alert("este vehículo es "+ este.tipo);
}
}
var moto=vehiculo nuevo("Moto");
moto.showSelf();
Para obtener información más detallada sobre el prototipo, visite su sitio web oficial.
http://www.cnblogs.com/sunwangji/archive/2006/08/21/482341.html