Maison > interface Web > js tutoriel > le corps du texte

Exemples de fermeture JavaScript expliqué_compétences Javascript

WBOY
Libérer: 2016-05-16 16:51:42
original
1018 Les gens l'ont consulté

L'avantage de ceci est que les fonctions internes peuvent accéder aux paramètres et variables de la fonction externe dans laquelle elles sont définies.

Tout d’abord, construisons un objet simple.

Copier le code Le code est le suivant :

var testObj = {
valeur : 10,
ajouter : function(inc){
this.value = (typeof inc === "number") inc : 1;
}
};

testObj.add();
testObj.value; // 11

testObj.add(2);
testObj.value; // 13


Il y a un problème avec l'écriture de cette façon. Il n'est pas garanti que la valeur ne soit pas modifiée illégalement. comme suit.
Copier le code Le code est le suivant :

var testObj = (function(){
var value = 10;
return {
add: function(inc){
value = (typeof inc === "number") ? getValue : function (){
                                          valeur de retour ;
testObj.add();
testObj.getValue(); // 11

testObj.add(2);
testObj.getValue(); // 13

Nous pouvons généralement appeler une fonction pour initialiser testObj La fonction renverra un objet littéral. La variable est définie ici, qui est toujours disponible pour les méthodes add et getValue, mais la portée de la fonction la rend invisible pour les autres programmes. Dans le même temps, nous pouvons également conclure que la fonction interne a un cycle de vie plus long que sa fonction externe.

Continuons à regarder un exemple d'appel de constructeur.



Copier le code


MyObj.prototype.getStatus = function(){
return this.status;
};

var obj = new MyObj("javascript");obj.getStatus(); // "javascript"


Il n'y a rien de mal à écrire ceci, mais ce sera un peu "inutile ", pourquoi ? Que diriez-vous d'utiliser une méthode getStatus pour accéder à une propriété accessible directement ? Bien entendu, cela n’a de sens que si le statut est une propriété privée.


Copier le code

Le code est le suivant :var obj = function(status){ return { getStatus : function(){ return status;
}
};
};

var myObj = obj("javascript");
myObj.getStatus(); // "javascript"

Ici, lorsque nous appelons obj, il renvoie un nouvel objet contenant la méthode getStatus, un la référence à l'objet est stockée dans myObj Même si obj a été renvoyé, la méthode getStatus bénéficie toujours du privilège d'accéder à l'attribut status de l'objet obj. La méthode getStatus n'accède pas à une copie du paramètre, elle accède au paramètre lui-même. Ceci est possible car la fonction a accès au contexte dans lequel elle a été créée, ce que l'on appelle une fermeture.
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!