Maison  >  Article  >  interface Web  >  Explication détaillée du code de la méthode d'appel, de la méthode d'application, de l'attribut de l'appelant et de l'attribut de l'appelé de JavaScript

Explication détaillée du code de la méthode d'appel, de la méthode d'application, de l'attribut de l'appelant et de l'attribut de l'appelé de JavaScript

黄舟
黄舟original
2017-03-18 15:14:351281parcourir


js call method_apply method_callerattribut_calleeattribut

1 appel à la méthode
Appeler une méthode d'un objet, remplacer l'objet actuel par un autre. objet (en changeant en fait le pointeur interne de l'objet, c'est-à-dire en changeant le contenu pointé par celui-ci de l'objet).

Code Js

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

Paramètres
thisObj
Facultatif. L'objet qui sera utilisé comme objet actuel.
arg1, arg2, , argN
Facultatif. Une séquence de paramètres de méthode sera transmise.
Explication
La méthode call peut être utilisée pour appeler une méthode à la place d'un autre objet. La méthode d'appel modifie le contexte d'objet d'une fonction du contexte initial au nouvel objet spécifié par thisObj. Si aucun paramètre thisObj n'est fourni, l'objet Global est utilisé comme thisObj.

Code Js

<input type=“text”id=“myText”value=“input text”>
<script>
functionObj(){this.value=“对象!”;}
varvalue=“global 变量”;
functionFun1(){alert(this.value);}

window.Fun1();   //global 变量
Fun1.call(window);  //global 变量
Fun1.call(document.getElementByIdx_x_x(‘myText’));//input text
Fun1.call(new Obj());//对象!
</script>

Code Js

varfirst_object = {
num: 42
};
varsecond_object = {
num: 24
};
functionmultiply(mult) {
returnthis.num * mult;
}
multiply.call(first_object, 5); // returns 42 * 5
multiply.call(second_object, 5); // returns 24 * 5

Méthode d'application
Le premier paramètre de la méthode d'application est également. obligatoire L'objet passé à l'objet actuel est celui-ci à l'intérieur de la fonction. Les paramètres suivants sont les paramètres transmis à l'objet actuel.
Appliquer et appeler ont la même fonction, mais il existe des différences dans les paramètres. La signification du premier paramètre est la même, mais pour le deuxième paramètre : appliquer des passes dans un tableau de paramètres, c'est-à-dire que plusieurs paramètres sont combinés dans un tableau et transmis, tandis que call est transmis en tant que paramètre d'appel (à partir du commençant par deux paramètres).
Par exemple, la méthode d'écriture d'application correspondante de func.call(func1,var1,var2,var3) est : func.apply(func1,[var1,var2,var3]). est que vous pouvez directement ajouter l'objet arguments de la fonction actuelle transmis comme deuxième paramètre de apply.

Code Js

var func=newfunction(){this.a=“func”}
varmyfunc=function(x,y){
vara=“myfunc”;
alert(this.a);
alert(x + y);
}
myfunc.call(func,“var”,“ fun”);// ”func” ”var fun”
myfunc.apply(func,["var"," fun"]);// ”func” ”var fun”

3. L'attribut appelant
renvoie une référence à la fonction, qui est le corps de la fonction qui appelle la fonction actuelle.
functionName.caller : L'objet functionName est le nom de la fonction en cours d'exécution.
Remarque :
Pour les fonctions, l'attribut de l'appelant n'est défini que lorsque la fonction est exécutée. Si la fonction est appelée depuis le niveau supérieur d'un programme JScript, alors l'appelant 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é.

Code Js

<script>
functionCallLevel(){
if(CallLevel.caller ==null)
alert(“CallLevel was called from the top level.”);
else
alert(“CallLevel was called by another function:\n”+CallLevel.caller);
}
functionfunCaller(){
CallLevel();
}
CallLevel();
funCaller()
</script>

4. L'attribut de l'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 de l'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 utile pour masquer la récursion de la fonction
ou assurer l'encapsulation de la fonction. L'exemple calcule récursivement les nombres naturels de 1 à n et. Et cet attribut
n'est disponible que lorsque la fonction associée est en cours d'exécution. Il convient également de noter que l'appelé a un attribut de longueur, qui est parfois
utilisé 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.

Code Js

//callee可以打印其本身
functioncalleeDemo() {
alert(arguments.callee);
}
//用于验证参数
functioncalleeLengthDemo(arg1, arg2) {
if(arguments.length==arguments.callee.length) {
window.alert(“验证形参和实参长度正确!”);
return;
} else{
alert(“实参长度:”+arguments.length);
alert(“形参长度: ”+arguments.callee.length);
}
}
//递归计算
var sum =function(n){
if(n <= 0)
return 1;
else
returnn +arguments.callee(n - 1)
}

5. lier

Code Js

<script type=“text/javascript”>
varfirst_object = {
num: 42
};
varsecond_object = {
num: 24
};

functionmultiply(mult) {
returnthis.num * mult;
}

Function.prototype.bind = function(obj) {
var method =this,
temp = function() {
returnmethod.apply(obj, arguments);
};

return temp;
}

varfirst_multiply = multiply.bind(first_object);
first_multiply(5); // returns 42 * 5

varsecond_multiply = multiply.bind(second_object);
second_multiply(5); // returns 24 * 5
</script>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en 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