Maison >interface Web >js tutoriel >arguments js, résumé de l'utilisation de l'appelant jcallee

arguments js, résumé de l'utilisation de l'appelant jcallee

高洛峰
高洛峰original
2017-01-04 17:21:591234parcourir

Mots clés : arguments, appelé, appelant
arguments : Représente les paramètres passés dans la fonction
appelé : Représente l'instruction de la fonction et le corps de la fonction
appelant : Représente la fonction qui appelle la fonction

arguments

Cet objet représente les paramètres de la fonction en cours d'exécution et la fonction qui l'appelle.

caller

Renvoie une référence à la fonction qui a appelé la fonction actuelle.
functionName.caller
functionName object est le nom de la fonction en cours d'exécution.

Explication
Pour les fonctions, l'attribut appelant n'est défini que lorsque la fonction est exécutée. Si la fonction est appelée depuis le niveau supérieur, caller contient null . Si l'attribut caller est utilisé dans un contexte de chaîne, le résultat est le même que functionName.toString, c'est-à-dire que le texte décompilé de la fonction est affiché.

appelé

Renvoie l'objet Function en cours d'exécution, qui est le corps de l'objet Function spécifié.

[function.]arguments.callee

Le paramètre de fonction facultatif est le nom de l'objet Function en cours d'exécution.

Explication

La valeur initiale de l'attribut appelé est l'objet Function en cours d'exécution.

L'attribut callee est membre de l'objet arguments. Il représente une référence à l'objet fonction lui-même. Ceci est bénéfique pour la récursion de fonctions anonymes ou pour assurer l'encapsulation de fonctions. calcule récursivement les nombres naturels de 1 à n. Cette propriété n'est disponible que lorsque la fonction associée est en cours d'exécution. Il convient également de noter que l'appelé possède un attribut de longueur, ce qui est parfois meilleur pour la vérification. arguments.length est la longueur réelle du paramètre et arguments.callee.length est la longueur du paramètre formel. À partir de là, vous pouvez déterminer si la longueur du paramètre formel est cohérente avec la longueur réelle du paramètre lors de l'appel.

<script type=&#39;text/javascript&#39;>
function test(x,y,z) 
{ 
alert("实参长度:"+arguments.length);
alert("形参长度:"+arguments.callee.length);
alert("形参长度:"+test.length);
alert(arguments[ 0 ])         
alert(test[ 0 ])           // undefined 没有这种用法
}
//test(1,2,3); 
test(1,2,3,4);
/*
*  arguments不是数组(Array类)
*/
Array.prototype.selfvalue  =   1 ;
function  testAguments() {
    alert( " arguments.selfvalue= " + arguments.selfvalue);
}
alert("Array.sefvalue="+new Array().selfvalue);
testAguments();
/**/ /*
 * 演示函数的caller属性.
 * 说明:(当前函数).caller:返回一个对函数的引用,该函数调用了当前函数
  */
function  callerDemo()  {
     if  (callerDemo.caller)  {
         var  a =  callerDemo.caller.arguments[ 0 ];
        alert(a);
    }   else   {
        alert( " this is a top function " );
    }
}
function  handleCaller()  {
    callerDemo();
}
 callerDemo();
 handleCaller("参数1","参数2");

/**/ /*
 * 演示函数的callee属性.
 * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数
  */
function  calleeDemo()  {
    alert(arguments.callee);
}
 calleeDemo();
 (function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})();

/**/ /*
 * 演示apply,call函数的用法
 * 说明:作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:
 *       apply(thisArg,argArray);
 *     call(thisArg[,arg1,arg2…] ]);
 *     即所有函数内部的this指针都会被赋值为thisArg
  */
  function  ObjectA() {
    alert( " 执行ObjectA() " );
    alert(arguments[ 0 ]);
     this .hit = function (msg) {alert(msg)}
     this .info = " 我来自ObjectA "
 }

  function  ObjectB() {
    alert( " 执行ObjectB() " );
     // 调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代
    ObjectA.apply( this ,arguments); // ObjectA.call(this);
    alert( this .info);
 }
  ObjectB(&#39;参数0&#39;);

  var  value = " global 变量 " ;
  function  Obj() {
     this .value = " 对象! " ;
 }
  function  Fun1() {
    alert( this .value);
 }
   Fun1();
   Fun1.apply(window); 
   Fun1.apply(new Obj());
</script>


Pour plus d'arguments js, le résumé de l'utilisation de l'appelant jcallee et les articles connexes, veuillez faire attention au site Web PHP chinois !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn