Une comparaison de 'ceci' en JavaScript et de ce 'soi' en Python

Dec 19 2022
Dans la programmation orientée objet, this et self sont tous deux utilisés pour faire référence à l'instance actuelle de l'objet sur lequel une méthode est appelée. Un objet est une structure de données qui contient des champs de données et des méthodes.
Photo de Di Bella Coffee

Dans la programmation orientée objet, thiset selfsont tous deux utilisés pour faire référence à l'instance actuelle de l'objet sur lequel une méthode est appelée.

Un objet est une structure de données qui contient des champs de données et des méthodes. Un objet représente une instance spécifique d'une classe, qui est un modèle ou un plan pour la création d'objets.

Une méthode est une fonction associée à un objet et utilisée pour effectuer une action ou un calcul sur l'objet. Les méthodes sont définies dans une définition de classe et peuvent être appelées sur un objet pour effectuer une tâche spécifique.

En JavaScript, le mot- thisclé fait référence à l'objet courant qui exécute la fonction courante. C'est un moyen d'accéder aux propriétés et aux méthodes d'un objet à partir de l'objet lui-même. La valeur de thisest déterminée par la façon dont une fonction est appelée.

Voici un exemple d' thisutilisation en JavaScript :

const person = {
  name: 'John',
  sayHi: function() {
    console.log(`Hi, my name is ${this.name}`);
  }
}

person.sayHi(); // Output: "Hi, my name is John"

En Python, le selfparamètre est utilisé pour faire référence à l'instance d'une classe. C'est l'équivalent des thisautres langages orientés objet. Le selfparamètre est utilisé pour accéder aux attributs et aux méthodes d'une classe à partir de la classe elle-même.

Et voici un exemple d' selfutilisation en Python :

class Person:
  def __init__(self, name):
    self.name = name
  
  def say_hi(self):
    print(f"Hi, my name is {self.name}")

person = Person("John")
person.say_hi() # Output: "Hi, my name is John"

Un bogue courant qui peut survenir lors de l'utilisation du selfparamètre dans Python est d'oublier de l'inclure comme premier paramètre dans une définition de méthode. Cela peut entraîner le déclenchement TypeErrorde a lorsque la méthode est appelée, car la méthode attend que le selfparamètre soit transmis.

Voici un exemple de ce type de bug :

class Person:
  def __init__(self, name):
    self.name = name
  
  def say_hi(): // missing self parameter
    print(f"Hi, my name is {self.name}") 

person = Person("John")
person.say_hi()

Pour corriger ce bogue, nous devons inclure le selfparamètre dans la définition de la méthode comme ceci :

def say_hi(self):
    print(f"Hi, my name is {self.name}")

Déboguer JavaScript

Un bogue courant qui peut survenir lors de l'utilisation du mot- thisclé en JavaScript est l'utilisation à l' thisintérieur d'une fonction qui n'est pas liée à un objet. Dans ce cas, la valeur de thissera définie sur l'objet global, ce qui peut entraîner un comportement inattendu.

Voici un exemple de ce type de bug :

const person = {
  name: 'John',
  sayHi: function() {
    console.log(`Hi, my name is ${this.name}`);
  }
}

const greet = person.sayHi;
greet(); // Output: "Hi, my name is undefined"

Lorsque nous appelons la greetfonction, la valeur de thisà l'intérieur de la fonction est définie sur l'objet global, qui n'a pas de namepropriété. Par conséquent, le message d'accueil est enregistré undefinedau lieu de la valeur attendue.

Pour corriger ce bogue, nous pouvons soit lier la valeur de thisà l' personobjet lors de la création de la greetvariable, soit nous pouvons utiliser une fonction fléchée pour la sayHiméthode, qui n'a pas sa propre thisvaleur et utilise la thisvaleur du contexte environnant.

Voici comment nous pourrions corriger l'exemple en utilisant la bindméthode :

const person = {
  name: 'John',
  sayHi: function() {
    console.log(`Hi, my name is ${this.name}`);
  }
}

const greet = person.sayHi.bind(person);
greet(); // Output: "Hi, my name is John"

const person = {
  name: 'John',
  sayHi: () => {
    console.log(`Hi, my name is ${this.name}`);
  }
}

const greet = person.sayHi;
greet(); // Output: "Hi, my name is John"

En JavaScript, le thismot-clé est utilisé pour accéder aux propriétés et aux méthodes d'un objet à partir de l'objet lui-même. Comprendre comment la valeur de thisest déterminée et comment l'utiliser correctement est essentiel pour travailler avec des objets en JavaScript.

En Python, le selfparamètre est utilisé pour faire référence à l'instance d'une classe et accéder à ses attributs et méthodes. Comprendre comment utiliser selfcorrectement le paramètre est essentiel pour travailler avec les classes et la programmation orientée objet en Python.

Sans une bonne compréhension de thisJavaScript et selfde Python, il est difficile d'écrire un code correct et maintenable qui utilise des objets et des classes.

Lisez mon autre article ' Quelques choses sur JavaScript et Python ' pour plus de similitudes et de différences entre les deux langages de programmation.

Merci d'avoir lu et j'espère que vous avez trouvé cela utile. Je suis ouvert aux commentaires et si vous trouvez une erreur, merci de bien vouloir me le faire savoir.