Antes de referirse al concepto anterior, primero quiere hablar sobre los parámetros ocultos de la función en la función en JavaScript:
Argumentos
Los argumentos representan los parámetros que se ejecutan y la función de llamar a su función. [función.] Argumentos [n] parámetro
Función: Opciones. El nombre del objeto de función se ejecuta actualmente.
N: Opciones. Para pasar el índice de valor del parámetro de 0 al objeto de función. Muestra que Argumeents es un objeto oculto creado además del parámetro especificado cuando se llama a la función. Los argumentos son un objeto similar a una matriz pero no una matriz. tiene la longitud del atributo de longitud de matriz. También existe el parámetro de que el objeto de argumentos almacena la función que realmente se pasa a la función, no se limita a la lista de parámetros definida por la declaración funcional, y no se puede crear explícitamente para crear un objeto de argumentos. El objeto de argumentos solo puede estar disponible al comienzo de la función.
El siguiente ejemplo explica estas propiedades en detalle
Copiar código del código de la siguiente manera:
// El uso del objeto de argumentos
Función argtest (a, b) {{
var i, s = "la función argtest esperada";
var numargs = argumentos.length;
Var expargs = argTest.length;
if (expargs <2)
s + = expargs + "argumento";
demás
s + = expargs + "argumentos" ;;
if (numargs <2)
s + = numargs + "fue pasado";
demás
s + = numargs + "pasamos";
s += ""
Para (i = 0; i <numargs; i ++) {// Obtener el contenido del parámetro.
s + = "arg" + i + "=" + argumentos + "" "";
}
Return (s);
}
Aquí hay un código que explica que los argumentos no son una matriz (clase de matriz):
Copiar código del código de la siguiente manera:
Array.prototype.setValue = 1;
alerta (nueva matriz (). Selfvalue);
Tests de funciones () {
Alerta (argumentos.selfvalue);
}
Encontrará la primera pantalla de alerta 1, lo que significa que el objeto de matriz tiene el atributo de valor autovalorado con un valor de 1. Cuando llame a la función testagumens, encontrará que "indefinido" muestra que no es el atributo de argumentos, que es, el atributo de argumentos, es decir, los argumentos no son un objeto de matriz.
Agregue una forma simple de agregar aquí: Alerta (instancia de argumentos de matriz);
Alerta (argumentos instancia de objeto);
Llamador
Devuelve una referencia a la función que llama a la función actual.
FunctionName.caller
El objeto FunctionName es el nombre de la función de ejecución.
ilustrar
Para las funciones, el atributo de llamadas se define solo cuando se ejecuta la función. Si la función se llama desde la capa superior, entonces la persona que llama contiene nulo. Si el atributo de llamadas se usa en el contexto de la cadena, el resultado es el mismo que FunctionName.tString, es decir, muestra que se muestra la función de la función.
Nota: Function.ToString () puede realizar la función anti -compilación de la función.
El siguiente ejemplo ilustra el uso del atributo de llamadas:
Copiar código del código de la siguiente manera:
// demo de llamadas {
función callDemo () {
if (callerDemo.caller) {
var a = callerDemo.caller.ToString ();
alerta (a);
} Demás {
Alerta ("Esta es una función superior");
}
}
función handlecaller () {
CallerDemo ();
}
Callejón
Devuelve el texto del objeto de función que se está ejecutando, el texto del objeto de función especificado. [Función.] Arguments.callee El parámetro opcional es el nombre del objeto de función que se ejecuta actualmente. Explique que el valor inicial del atributo Callee es el objeto de función que se está ejecutando. El atributo Callee es un miembro del objeto Argumentos, que indica la referencia al objeto de función en sí, que es propicio para la recursividad de la función anónima o el empaque de la función. Este atributo solo está disponible cuando se ejecuta la función de correlación. Cabe señalar que Callee tiene un atributo de longitud. Argumentos.length es una longitud de parámetro sólida y argumentos.callee.length es la longitud del parámetro, que puede determinar si la longitud del parámetro es consistente con la longitud del parámetro real.
Ejemplo ejemplar
Copiar código del código de la siguiente manera:
// Callee puede imprimirse
function llamadoMo () {
Alerta (argumentos.callee);
}
// utilizado para verificar los parámetros
Function calleelelengthDemo (arg1, arg2) {{
if (arguments.length == arguments.callee.length) {
Window.alert ("Verificar el ginseng y la longitud sólida del parámetro es correcta!");
Devolver;
} Demás {
Alerta ("Longitud de parámetro sólido:" +argumentos.length);
Alerta ("" forma permitida: +argumentos.callee.length);
}
}
// Cálculo recursivo
var sum = function (n) {
if (n <= 0)
Regresar 1;
demás
Return n + arguments.callee (n -1)
} En comparación con las funciones recursivas generales: var sum = function (n) {
if (1 == n) return 1;
El más return n + sum (n-1);
}
En el momento de la llamada: alerta (suma (100));
Entre ellos, la función contiene la referencia a la suma misma.
Aplicar y llamar
Su papel es unir la función a otro objeto.
Aplicar (ThatErg, Argarraray);
llamar (thatesarg [, arg1, arg2 ...]);
Es decir, este puntero dentro de todas las funciones se asignará a Thisarg, lo que puede darse cuenta del propósito del propósito de usar la función como otro método del método.
Si no se proporciona algún parámetro de argarraray y thantarg, el objeto global se utilizará como thantarg y no se puede transmitir en ningún parámetro. El método de llamada de descripción de llamadas puede cambiar el contexto de un objeto de una función desde el contexto inicial a un nuevo objeto especificado por Thisarg.
Si no proporciona un parámetro thatErg, el objeto global se usa como una técnica relacionada con el thanting: después de aplicar la llamada y aplicar, hay otra técnica en él. La función actual (clase).
Mira el siguiente ejemplo:
Copiar código del código de la siguiente manera:
// demostración hereditaria
Función base () {
this.member = "dnnnsun_member";
this.method = function () {
Window.alert (this.Member);
}
}
function expedition () {) {
base.call (esto);
Window.alert (miembro);
Window.alert (this.method);
}
Los ejemplos anteriores se pueden ver que después de la llamada, la extensión puede heredar el método y los atributos de la base. Por cierto, use aplicar para crear un modelo de definición en el prototipo de marco JavaScript.
Copiar código del código de la siguiente manera:
var class = {
Create: function () {
Función de retorno () {
this.initialize.apply (esto, argumentos);
}
}
}
Análisis: desde el código, el objeto contiene solo un método: Crear, que devuelve una función, es decir, clase. Pero este también es un constructor de la clase, donde se llama la inicialización, y este método es la función de inicialización definida durante la creación de la clase. De esta manera, se pueden implementar ejemplos de patrón de creación de clase en prototipo:
Copiar código del código de la siguiente manera:
var vehículo = class.create ();
vehículo.prototype = {
inicializar: function (type) {
this.type = type;
}
ShowSelf: functer () {{)
Alerta ("esto es"+ this.type);
}
} Var moto = nuevo vehículo ("Moto");
Moto.showSelf ();