recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Le problème avec ça en js

Novice JS, si vous rencontrez des problèmes, veuillez d'abord écrire le code

var name = "John";

var myObject = function() {

    return {
        getName: function() {
            return this.name;
        }
    }
}();

alert(myObject.getName());

Le résultat de sortie n'est pas défini
Mes questions sont 1. return里面的getNamefunction是不是匿名函数 我现在理解的是匿名函数 那么这个this应该就是指向全局吧?就是window 那为啥不输出john 2.让我更困惑的是,我在调试时候一步步走,走到this.name的时候,this指向的是Object 而当输出完undefined的时候,我在监视那里的this变成了windowthis.name也变成了john, je ne comprends pas très bien, aidez-moi s'il vous plaît !

我想大声告诉你我想大声告诉你2730 Il y a quelques jours588

répondre à tous(3)je répondrai

  • typecho

    typecho2017-06-26 10:59:12

    Ce problème doit être examiné étape par étape. Tout d'abord, myObject est un objet. Il contient une propriété appelée getName, et la valeur est une fonction anonyme. alert(myObject.getName());C'est cet objet qui appelle cette méthode, c'est donc cela. indéfini pour le moment.

    //
    var name = "John";
    
    var myObject = function() {
    
        return {
            getName: function() {
                return this.name;
            }
        }
    }();
    
    var f = myObject.getName;
    
    alert(f()); //John
    
    // 这样就返回的是John,因为这个时候的getName是在全局执行的,this指向的就是window。
    
    var name = "John";
    
    var myObject = function() {
    
        return {
            getName: () => {
                return this.name;
            }
        }
    }();
    
    alert(myObject.getName()); //John
    
    // 也可以通过es6修正this的指向
    
    

    Prolongez-le à nouveau, regardez le code ci-dessous

        var object = {
            name: 'lucy',
            getName: function() {
                return function () {
                    return this.name
                }
            }
        }
     console.log(object.getName()()) //John
    

    La méthode object.getName() renvoie une fonction anonyme. L'environnement d'exécution est la portée globale. Cela pointe vers la portée d'exécution basée sur la fonction, il s'agit donc de window.name pour le moment.
    Si nous voulons renvoyer Lucy, nous devons le faire en créant une fonction de flèche ou une fermeture.

    var object = {
        name: 'lucy',
        getName: function() { console.log(this)
            return  () => {
                return this.name
            }
        }
    }
     console.log(object.getName()()) //lucy
     
     var object = {
        name: 'lucy',
        getName: function() {
            var that = this;
            return function () {
                return that.name
            }
        }
    }
     console.log(object.getName()()) //lucy
    

    L'objet this dans le corps de la fonction flèche est l'objet où il est défini, et non l'objet où il est utilisé.

    Quant au problème du débogage de ce changement de point, c'est parce que la portée d'origine de la fonction anonyme est window, mais lorsqu'elle est exécutée, myObject l'appelle, donc cela pointe vers myObject à ce moment-là.

    répondre
    0
  • 为情所困

    为情所困2017-06-26 10:59:12

    var name = "John";
    
    var myObject = function() {
    
        return {
            getName: function() {
                return this.name;
            }, 
            name: 'eczn'
        }
    }();
    
    myObject.getName(); 
    // => 
    // "eczn"

    getNamethis 指的是 myObject,因为 getName 直接是 myObject 所调用的,所以这里的 this 指的是 ———— 调用函数的那个对象

    répondre
    0
  • 为情所困

    为情所困2017-06-26 10:59:12

    myObject.getName()
    Habituellement, celui qui appelle une fonction indiquera vers qui cette fonction pointe

    répondre
    0
  • Annulerrépondre