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

Var JavaScript et ceci, {} et fonction

php中世界最好的语言
Libérer: 2018-03-16 14:23:49
original
2108 Les gens l'ont consulté

Cette fois, je vais vous apporter la variable JavaScript et ceci, {} et la fonction, Utiliser la variable JavaScript et ceci, {} et la fonction À noterQuels sont les éléments suivants ? Jetons un coup d'œil à des cas réels.

JavaScript var est utilisé pour définir une variable, et ceci est souvent utilisé pour définir ou appeler une propriété ou une méthode. Mais dans la portée globale, this et var définissent les variables sont équivalents.

window

 console.log('window:', name); var name = 'stone'; this.name = 'niqiu';
 console.log('var:',name);
 console.log('this:',this.name);
Copier après la connexion

window object a un attribut name, la valeur initiale est vide, mais le premier console Comment obtenir la valeur quand . On constate que cette fenêtre enregistre la dernière valeur. Rouvrez la page et exécutez simplement console.log('window:', name); et la sortie est vide.

  console.log('window:', name);  var name = 'stone';
Copier après la connexion

Actualiser deux fois puis pierre de sortie Ainsi, l'objet fenêtre n'est pas recréé lors de l'actualisation. window est un objet {}. Il n'y a pas de constructeur et ne peut pas être nouveau.

fonction et {}

À l'intérieur de la fonction, var définit des variables locales, et cela définit des attributs. Ces deux-là ne sont pas couverts. Mais les objets nouvellement créés ne peuvent pas obtenir de variables locales.

     var Fool = function () {            var name = 'stone';            var nikename = 'stoneniqiu';            this.name = 'niqiu';            this.getName = function () {
                console.log('var', name);
                console.log('this', this.name);
            };            this.getNickname = function() {                return nikename;
            };
        };
Copier après la connexion
    console.log(f.name); //niqiu
    console.log(f.nikename);//undefined
    console.log(f.getNickname());//stoneniqiu
Copier après la connexion

Mais si vous utilisez {} pour définir un objet, toutes les variables internes sont des propriétés.

  var block = {
            name: 'stone',
            nickname:'stoneniqiu',
            getName: function () {                // return this.name;//stone
                return name; //'windows name';            },
            getNickname:function() {                return this.nickname;
            },
            printAllName:function() {
                console.log(this.getNickname());
                console.log(this.getName());
            }
        };
       console.log(block.name);//stone
       console.log(block.getName()); //windows name
Copier après la connexion

Comme l'objet window, l'objet créé par {} ne peut pas être nouveau car il n'y a pas de constructeur.

Donc, si l'objet est réutilisé et est relativement volumineux, il est préférable d'utiliser le formulaire de fonction pour séparer les variables privées et les propriétés ou méthodes publiques. peut utiliser le formulaire {}.

Les méthodes qui peuvent obtenir le contexte auquel elles appartiennent grâce à cela sont appelées méthodes publiques . La liaison de ceci à l'objet se produit au moment de l'appel. Cette "super" liaison retardée permet à la fonction de le réutiliser fortement.

Ceci fait référence à l'objet actuellement exécuté, pour éviter ce changement. Une variable est souvent utilisée pour stocker temporairement cela.

var self=this
Copier après la connexion

Rappel magique

Regardons un exemple. La méthode de rappel est définie dans les paramètres de l'objet, mais une méthode que nous avons passée dans Fool lui-même a en fait été exécutée.

 var Fool = function (config) {           var parmas = {
               callback: function() {
                   console.log('raw callback');
               }
           };
           parmas = $.extend(parmas, config);           var name = 'stone';           var nikename = 'stoneniqiu';           this.name = 'niqiu';           this.getName = function () {
               console.log('var', name);
               console.log('this', this.name);
           };           this.getNickname = function () {               return nikename;
           };           this.doSomething = function () {
               parmas.callback();
           };
       };       var f = new Fool({callback:function() {
           $("#bt").click(function() {               f.getName()
           });
       }});
       f.doSomething();
Copier après la connexion

fonctionne correctement, cliquez sur le bouton pour déclencher la méthode getName. Mais si vous écrivez directement ainsi, une erreur sera signalée, ce qui est très logique.

 var f = new Fool({callback:f.getName()});
Copier après la connexion

Si vous le modifiez à nouveau et l'enveloppez avec une fonction anonyme, il peut toujours fonctionner.

var f = new Fool({callback:function() {             (function() {
               f.getName();
            })();
       }});
       f.doSomething();
Copier après la connexion

Je l'ai compris aujourd'hui. Il s'agit en fait d'un problème de fermeture. Le f.getName() exécuté à l'intérieur de la fonction est équivalent à une variable. Il lie le f externe, pas au moment où la fonction est. construit f, il ne se soucie donc pas de savoir si f est créé lorsque la fonction anonyme est construite. Cela équivaut au problème classique suivant :

var addhandle=function(node){var ifor(i=0;i<node.length;i++){
 node[i].onclick=function(e){
 alert(i);
} 
}
}
Copier après la connexion

Si la méthode ci-dessus est exécutée, ce qui est lié est i après la fin de la boucle. Au lieu de parcourir i à ce moment-là. Si le code dans la boucle ci-dessus est modifié comme suit.

nodes[i].onclick=function(i){ return function(e){
 alert(e)
 }
}(i)
Copier après la connexion

est la variable i lors de la construction de la fonction.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Gestion d'événements en JavaScript

Explication détaillée de Promise en jQuery, Angular et node

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!

É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