Maison  >  Article  >  interface Web  >  Solution à la solution indiquée par ceci dans la fermeture js (code)

Solution à la solution indiquée par ceci dans la fermeture js (code)

不言
不言original
2018-08-23 15:47:012304parcourir

Le contenu de cet article concerne la solution (code) indiquée par ceci dans la fermeture js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela vous sera utile.

Ce qui suit est une question, pour la sous-fonction définie dans la méthode objet, où cela pointe-t-il lorsque la sous-fonction est exécutée ?
Trois questions :
(1) Quel est l’objet imprimé dans le code suivant ?
(2) Ce code peut-il atteindre la fonction d'augmenter myNumber.value de 1 ?
(3) Sans abandonner la fonction d'assistance, quelles méthodes de modification peuvent être utilisées pour obtenir la fonction correcte ?

var myNumber = {
  value: 1,
  add: function(i){
    var helper = function(i){
        console.log(this);          
        this.value += i;
    }
    helper(i);
  }
}
myNumber.add(1);

1. ceci pointe vers l'objet window (car l'exécution de la fonction anonyme est globale, donc cet objet pointe vers la fenêtre
2 La valeur ne peut pas être augmentée de 1) ; (chaque fonction est appelée quand obtiendra automatiquement deux variables spéciales, this et arguments. Lorsque la fonction interne recherche ces deux objets, elle ne recherchera que jusqu'à son objet actif, elle ne peut donc pas accéder à l'objet this de la fonction externe); 🎜>3. Modifier le code Pour obtenir la fonction correcte
Première méthode :

var myNumber={
    value:1,
    add:function(i){
        var that=this;//定义变量that用于保存上层函数的this对象
        var helper=function(i){
             console.log(that);
        that.value+=i;
    }
    helper(i);
    }
}
myNumber.add(1);
Méthode deux :

var myNumber={
    value:1,
    add:function(i){
        var helper=function(i){
            this.value+=i;
        }
        helper.apply(this,[i]);//使用apply改变helper的this对象指向,使其指向myNumber对象
    }
}
myNumber.add(1);
Méthode trois :

var myNumber={
    value:1,
    add:function(i){
        var helper=function(i){
            this.value+=i;
        }.bind(this,i);//使用bind绑定,和apply相似,只是它返回的是对函数的引用,不会立即执行
        helper(i);
    }
}
myNumber.add(1);
Recommandations associées :

Comment js détermine-t-il si le navigateur est PC ou mobile ? (Deux méthodes)

Deux façons d'appeler des fonctions auto-exécutables en js

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