Mise à jour des questions d'entretien - cela pointe vers la question

insérer la description de l'image ici


à quoi cela indique-t-il

Le mot-clé this en JavaScript est utilisé pour faire référence à l'objet qui exécute actuellement du code. Son pointage est dynamique et évolue en fonction du contexte d'exécution.

Dans les cas courants, cela indique

  1. this dans la portée globale :
    dans la portée globale, this pointe vers l'objet global, c'est-à-dire qu'il pointe vers l'objet window dans l'environnement du navigateur et pointe vers l'objet global dans l'environnement Node.js.

console.log(this); // affiche l'objet window dans l'environnement du navigateur et affiche l'objet global dans l'environnement Node.js

  1. this dans une fonction :
    dans une fonction, ce que cela pointe dépend de la manière dont la fonction est appelée. Voici quelques situations courantes :
  • La fonction est appelée en fonction normale :
    lorsque la fonction est appelée en fonction normale, cela pointe vers l'objet global (non défini en mode strict).
function myFunction() {
    
    
  console.log(this);
}

myFunction(); // 在浏览器环境中输出 window 对象,在 Node.js 环境中输出 undefined(在严格模式下)
  • Une fonction est invoquée comme méthode d'un objet :
    Lorsqu'une fonction est invoquée comme méthode d'un objet, cela pointe vers l'objet sur lequel la méthode a été invoquée.
const obj = {
    
    
  name: 'John',
  sayHello: function() {
    
    
    console.log(`Hello, ${
      
      this.name}!`);
  }
};

obj.sayHello(); // 输出 "Hello, John!"
  • La fonction est appelée en tant que constructeur :
    lorsqu'une fonction est appelée en tant que constructeur à l'aide du mot-clé new, cela pointe vers l'objet instance nouvellement créé.
function Person(name) {
    
    
  this.name = name;
}

const john = new Person('John');
console.log(john.name); // 输出 "John"
  • Les fonctions sont invoquées à l'aide des méthodes call, apply ou bind :
    Les méthodes call, apply ou bind vous permettent de spécifier explicitement l'objet de contexte pour l'appel de fonction.
function sayHello() {
    
    
  console.log(`Hello, ${
      
      this.name}!`);
}

const obj1 = {
    
     name: 'John' };
const obj2 = {
    
     name: 'Jane' };

sayHello.call(obj1); // 输出 "Hello, John!"
sayHello.apply(obj2); // 输出 "Hello, Jane!"

const boundFunction = sayHello.bind(obj1);
boundFunction(); // 输出 "Hello, John!"
  1. this dans une fonction flèche :
    le this d'une fonction flèche n'est lié à aucun objet spécifique, mais est hérité de la portée externe. Il capture le contexte dans lequel la fonction a été définie et persiste tout au long de la durée de vie de la fonction flèche.
const obj = {
    
    
  name: 'John',
  sayHello: () => {
    
    
    console.log(`Hello, ${
      
      this.name}!`);
  }
};

obj.sayHello(); // 输出 "Hello, undefined!",因为箭头函数的 this 继承自外部作用域,此处的 this 指向全局对象

Comment modifier la direction de ceci

  1. Utilisez la méthode call() :
    La méthode call() vous permet d'appeler explicitement la fonction, de spécifier l'objet contextuel (c'est-à-dire sa valeur) et de transmettre des paramètres lorsque la fonction est exécutée.
function sayHello() {
    
    
  console.log(`Hello, ${
      
      this.name}!`);
}

const obj = {
    
     name: 'John' };
sayHello.call(obj); // 输出 "Hello, John!"
  1. Utilisation de la méthode apply() :
    La méthode apply() est similaire à la méthode call() sauf que les paramètres sont passés. La méthode apply() accepte un tableau contenant des paramètres.
function sayHello(greeting) {
    
    
  console.log(`${
      
      greeting}, ${
      
      this.name}!`);
}

const obj = {
    
     name: 'John' };
sayHello.apply(obj, ['Hello']); // 输出 "Hello, John!"
  1. Utilisation de la méthode bind() :
    La méthode bind() crée une nouvelle fonction dont cette valeur est liée à l'objet spécifié. Au lieu d'exécuter la fonction immédiatement, il renvoie une fonction liée à la nouvelle valeur this.
function sayHello() {
    
    
  console.log(`Hello, ${
      
      this.name}!`);
}

const obj = {
    
     name: 'John' };
const boundFunction = sayHello.bind(obj);
boundFunction(); // 输出 "Hello, John!"
  1. Utilisation des fonctions fléchées :
    la valeur this d'une fonction fléchée est héritée de la portée externe, elle ne peut donc pas être modifiée par la méthode ci-dessus. Le this d'une fonction fléchée pointe toujours vers le contexte dans lequel elle a été définie.
const obj = {
    
    
  name: 'John',
  sayHello: function() {
    
    
    const arrowFunction = () => {
    
    
      console.log(`Hello, ${
      
      this.name}!`);
    };

    arrowFunction(); // 输出 "Hello, John!"
  }
};

obj.sayHello();

Ces méthodes peuvent vous aider à modifier ce vers quoi cela pointe en JavaScript. Selon différents scénarios et exigences, choisissez une méthode appropriée pour modifier la valeur de celui-ci.

Guess you like

Origin blog.csdn.net/weixin_48998573/article/details/132167840