Antes de se referir ao conceito acima, primeiro quero falar sobre os parâmetros ocultos da função na função em javascript: argumentos
Argumentos
Este objeto representa os parâmetros da função que é executada e chama sua função.
[função.] Argumentos [n]
Função do parâmetro: Opções. O nome do objeto de função é atualmente executado. N: Opções. Para passar o índice de valor do parâmetro de 0 para o objeto de função.
ilustrar
Os argumentos são um objeto oculto criado, além dos parâmetros especificados quando a função chama. Os argumentos são um objeto semelhante a uma matriz, mas não uma matriz. tem o comprimento do comprimento da matriz. Há também o parâmetro de que o objeto Argumentos armazena a função que é realmente passada para a função, não limitada à lista de parâmetros definida pela instrução funcional e não pode ser criada explicitamente para criar um objeto de argumentos. O objeto de argumentos só pode estar disponível no início da função. O exemplo a seguir explica essas propriedades em detalhes:
Copie o código do código da seguinte forma:
// o uso de um objeto de objetos.
Função argtest (a, b) {{
var i, s = "a função argtest esperada";
var nUMARGS = argumentos.Length;
VAR EXPARGS = argtest.length;
if (Expargs <2)
s + = Expargs + "argumento";
outro
S + = Expargs + "Argumentos"; ;;
if (nUMARGS <2)
s + = nUMARGS + "foi passado";
outro
s + = nUMARGS + "Passamos";
s += "/n/n"
For (i = 0; i <numeRgs; i ++) {// Obtenha o conteúdo do parâmetro.
s + = "arg" + i + "=" + argumentos [i] + "/n";
}
Return (s); // retorna a lista de parâmetros.
}
Aqui está um código que explica que os argumentos não são uma matriz (classe de matriz):
Copie o código do código da seguinte forma:
Array.prototype.SetValue = 1;
alerta (new Array (). Autovalue);
Função tests () {
Alerta (argumentos.selfvalue);
}
Você encontrará o primeiro Alert Display 1, o que significa que o objeto da matriz tem o atributo auto -avaliativo com um valor de 1. Quando você chama a função testagumens, descobrirá que "indefinido" mostra que não é o atributo de argumentos, que que é, o atributo dos argumentos, ou seja, os argumentos não são um objeto de matriz.
Chamador
Retorna uma referência à função que chama a função atual.
FunctionName.Caller
O objeto FunctionName é o nome da função de execução.
ilustrar
Para funções, o atributo chamador é definido apenas quando a função é executada. Se a função for chamada da camada superior, o chamador contém nulo. Se o atributo chamador for usado no contexto da string, o resultado será o mesmo que FunctionName.TString, ou seja, ele mostra o texto compilado da função.
O exemplo a seguir ilustra o uso do atributo chamador:
Copie o código do código da seguinte forma:
// demonstração de chamadas {
função calldemo () {
if (callerdemo.caller) {
var a = callerdemo.caller.toString ();
alerta (a);
} Outro {
Alerta ("Esta é uma função superior");
}
}
function handlecaller () {
Callerdemo ();
}
Callee
Retorna o texto do objeto de função que está sendo executado, o texto do objeto de função especificado.
[Function.] Argumentos.callee
O parâmetro de função opcional é o nome do objeto de função atualmente sendo executado.
ilustrar
O valor inicial do atributo callee é o objeto de função que é executado.
O atributo callee é um membro do objeto de argumentos, que indica a referência ao próprio objeto de função, que é propício à recursividade da função anônima ou à embalagem da função. Este atributo está disponível apenas quando a função de correlação é executada. Deve -se notar que o Callee tem um atributo de comprimento. Argumentos.Length é um comprimento de parâmetro sólido e argumentos.Callee.Length é o comprimento do parâmetro, que pode determinar se o comprimento do parâmetro é consistente com o comprimento real do parâmetro.
Exemplo exemplar
Copie o código do código da seguinte forma:
// callee pode se imprimir
Função chamadaMo () {
Alerta (argumentos.callee);
}
// usado para verificar parâmetros
Função calleelEleLengthDemo (arg1, arg2) {{
if (argumentos.Length == argumentos.callee.length) {
Window.alert ("Verificar o ginseng e o comprimento do parâmetro sólido está correto!");
Retornar;
} Outro {
Alerta ("Comprimento do parâmetro sólido:" +argumentos.length);
Alerta ("" forma permeada: +argumentos.callee.length);
}
}
// Cálculo recursivo
var sum = function (n) {
if (n <= 0)
Retornar 0;
outro
Retorne n + argumentos.Callee (n -1)
}
Funções de recursão mais gerais:
Copie o código do código da seguinte forma:
var sum = function (n) {
if (n <= 0)
Retornar 0;
outro
Retornar n + soma (n-1);
}
No momento da chamada: Alert (soma (100));
Entre eles, a função contém a referência à própria soma.
Aplique e ligue
Seu papel é vincular a função a outro objeto.
aplicar (thisarg, argarray);
ligue (thisarg [, arg1, arg2 ...]);
Ou seja, tudo isso este ponteiro dentro da função será atribuído a ThisArg, que pode alcançar o objetivo de executar a função como outro objeto.
Descrição da aplicação
Se o Argarray não for uma matriz eficaz ou não for um objeto de argumentos, ela causará um typerror.
Sem parâmetros de argarray e thisArg, o objeto global será usado como thisArg,
E não pode ser transmitido em nenhum parâmetros.
Descrição da chamada
O método de chamada pode alterar o contexto de um objeto de uma função do contexto inicial para um novo objeto especificado por ThisArg.
Se não forem fornecidos com os parâmetros do AARG, o objeto global é usado como thisArg
Habilidades relacionadas:
Há outra técnica na aplicação de chamada e aplicação, ou seja, depois de usar outra função (classe) com chamada e aplicação, a função atual (classe) possui outro método (classe) ou atributo. "herança". Veja o exemplo a seguir:
Copie o código do código da seguinte forma:
// demonstração herdada
Função base () {
this.member = "dnnnsun_member";
this.method = function () {
Window.alert (this.Membro);
}
}
function expedition () {) {
base.call (this);
Window.alert (membro);
Window.Alert (this.method);
}
Os exemplos acima podem ser vistos que, após a chamada, estender pode herdar o método e os atributos da base.
A propósito, o uso aplique para criar um modelo definido no JavaScript Framework Propro.
De fato, o código atual é o seguinte:
Copie o código do código da seguinte forma:
var class = {
Criar: function () {
Return function () {
this.initialize.Apply (isto, argumentos);
}
}
}
Análise: A partir do código, o objeto contém apenas um método: Create, que retorna uma função, ou seja, classe. Mas este também é um construtor da classe, onde a inicialização é chamada, e esse método é a função de inicialização definida durante a criação da classe. Dessa maneira, você pode implementar o modo de criação de classe no protótipo
Exemplo:
Copie o código do código da seguinte forma:
var veículo = classe.create ();
veículo.prototype = {
inicializar: function (type) {
this.type = type;
}
Show de si: function () {{)
Alerta ("este é"+ this.type);
}
}
var moto = novo vene ("moto");
moto.showself ();