javascript - Pourquoi y a-t-il un résultat non différent supplémentaire dans le résultat de la console lors de l'utilisation de méthodes objet?
習慣沉默
習慣沉默 2017-05-19 10:32:47
0
7
769

Q1 Pourquoi la console en a-t-elle sorti deux sans différence à la fin ?

var a = { b: { m: function() { console.log(this.p); }, p: 'Hello' } }; var hello = a.b.m; hello()

Q2 donne l'impression qu'il y en a un de plus sans différence ici

//代码 var a = { b: { m: function() { console.log(this.p); }, p: 'Hello' } }; var hello = a.b; hello.m();

Supplément :
Source du problème :
Ce mot-clé dans le standard JS de Ruan Yifeng
Le code ci-dessus est dans le lien, 2. (3) Méthode objet, le dernier paragraphe

習慣沉默
習慣沉默

répondre à tous (7)
漂亮男人

Répondre automatiquement, résumant l'aide précédente :

Q1
Le premier n'est pas défini, car hello pointe vers une méthode, qui peut être considérée comme functionName, donc c'est window
this. p; / /window.p//Déclarez d'abord un window.p, aucune valeur n'est attribuée, la valeur n'est pas modifiéethis.p; //window.p//首先声明一个window.p,未赋值,值是undifined

关键是多了一个undifined!
第二个undefined,前面有个箭头,
在 m 函数里加一个 return 'test',//"test"
所以,这个箭头可以看做return后面的值,这里m函数没有return,没有返回值就是undifined
总结:前面这个箭头,是控制台独有的,命令行调试时没有
控制台先是执行函数,然后是,输出函数的执行结果(比如再用来 给别的赋值)

Q2
第一个undefined,因为hello指向了一个对象,可以看做b,所以this.p; //b.p

La clé c'est qu'il y en a un de plus indiffé ! ##Le deuxième non défini a une flèche devant, ##Ajouter un retour 'test' dans la fonction m, //"test"##Donc, cette flèche peut être vu Faites la valeur après le retour Il n'y a pas de retour dans la fonction m ici S'il n'y a pas de valeur de retour, elle est inchangée#### Résumé## : La flèche. devant est unique à la console et à la ligne de commande Lors du débogage, il n'y a pas de ## La console exécute d'abord la fonction, puis affiche le résultat de l'exécution de la fonction (par exemple, elle peut être utilisée pour attribuer des valeurs à d'autres choses)## ####Q2####Le premier n'est pas défini, car hello pointe vers un objet et peut être considéré comme b, donc this.p //b.p; ># #
    小葫芦

    est la valeur de retour de la dernière instruction. Pouvez-vous essayer d'ajouter un "test" de retour à la fonction m ?

      黄舟

      Personnellement, je pense que le premier non défini est dû au fait que la fonction n'a pas de valeur de retour, et le second non défini peut être dû au débogage du navigateur. Pouvez-vous essayer d'utiliser la ligne de commande pour déboguer et voir si le deuxième non défini apparaîtra.

        迷茫

        Utilisez-vous la console du navigateur Chrome ? Le second non défini est inhérent et n'a rien à voir avec votre code.

        Entrez var a = 1;

        Appuyez sur Entrée et il y a aussi undéfini.

          为情所困

          Je pense que c'est vous. Le pointeur this de cette méthode a changé la définition de la méthode dans l'objet a en une variable sous window. Pour le moment, cela pointe vers window et il n'y a pas de définition de p sous window. Vous pouvez utiliser var hello Vous comprendrez si vous déclarez un var P avant

            黄舟

            1.hello() n'a pas de valeur de retour
            2.console.log() cette fonction n'a pas de valeur de retour

              仅有的幸福

              Questions supplémentairesundefined是js语句本身的值,剩下的就是this.

                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!