Porównanie „tego” w JavaScript i tamtego „ja” w Pythonie

Dec 19 2022
W programowaniu zorientowanym obiektowo zarówno this, jak i self są używane w odniesieniu do bieżącej instancji obiektu, dla którego wywoływana jest metoda. Obiekt to struktura danych zawierająca pola danych i metody.
Zdjęcie autorstwa Di Bella Coffee

W programowaniu zorientowanym obiektowo thisi selfoba są używane w odniesieniu do bieżącej instancji obiektu, do którego wywoływana jest metoda.

Obiekt to struktura danych zawierająca pola danych i metody. Obiekt reprezentuje konkretną instancję klasy, która jest szablonem lub planem tworzenia obiektów.

Metoda to funkcja, która jest powiązana z obiektem i służy do wykonywania pewnych działań lub obliczeń na obiekcie. Metody są zdefiniowane w definicji klasy i mogą być wywoływane na obiekcie w celu wykonania określonego zadania.

W JavaScript thissłowo kluczowe odnosi się do bieżącego obiektu, który wykonuje bieżącą funkcję. Jest to sposób na dostęp do właściwości i metod obiektu z poziomu samego obiektu. Wartość thisjest określana przez sposób wywołania funkcji.

Oto przykład thisużycia w JavaScript:

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

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

W Pythonie selfparametr jest używany do odwoływania się do instancji klasy. Jest to odpowiednik thisw innych językach obiektowych. Parametr selfsłuży do uzyskiwania dostępu do atrybutów i metod klasy z poziomu samej klasy.

A oto przykład selfużycia w Pythonie:

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"

Częstym błędem, który może wystąpić podczas używania selfparametru w Pythonie, jest zapominanie o dołączeniu go jako pierwszego parametru w definicji metody. Może to spowodować wywołanie TypeErrormetody, ponieważ metoda oczekuje na selfprzekazanie parametru.

Oto przykład tego typu błędu:

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()

Aby naprawić ten błąd, musimy dołączyć selfparametr do definicji metody w następujący sposób:

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

Debugowanie JavaScriptu

Częstym błędem, który może wystąpić podczas używania thissłowa kluczowego w JavaScript, jest użycie thiswewnątrz funkcji, która nie jest powiązana z obiektem. W takim przypadku wartość thiszostanie ustawiona na obiekt globalny, co może prowadzić do nieoczekiwanego zachowania.

Oto przykład tego typu błędu:

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"

Kiedy wywołujemy greetfunkcję, wartość thiswewnątrz funkcji jest ustawiana na obiekt globalny, który nie ma namewłaściwości. W rezultacie dzienniki powitania undefinedzamiast oczekiwanej wartości.

Aby naprawić ten błąd, możemy albo powiązać wartość z thisobiektem personpodczas tworzenia greetzmiennej, albo możemy użyć funkcji strzałki dla sayHimetody, która nie ma własnej thiswartości i wykorzystuje thiswartość otaczającego kontekstu.

Oto jak możemy naprawić przykład za pomocą bindmetody:

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"

W JavaScript thissłowo kluczowe służy do uzyskiwania dostępu do właściwości i metod obiektu z poziomu samego obiektu. Zrozumienie, w jaki sposób ustalana thisjest wartość i jak prawidłowo jej używać, jest niezbędne do pracy z obiektami w JavaScript.

W Pythonie selfparametr służy do odwoływania się do instancji klasy i uzyskiwania dostępu do jej atrybutów i metod. Zrozumienie, jak prawidłowo używać selfparametru, jest niezbędne do pracy z klasami i programowania obiektowego w Pythonie.

Bez odpowiedniego zrozumienia thisJavaScript i selfPythona trudno jest napisać poprawny i łatwy w utrzymaniu kod, który używa obiektów i klas.

Przeczytaj mój drugi post „ Kilka rzeczy o JavaScript i Pythonie ”, aby dowiedzieć się więcej o podobieństwach i różnicach między tymi dwoma językami programowania.

Dziękuję za przeczytanie i mam nadzieję, że to było pomocne. Jestem otwarty na opinie, a jeśli znajdziesz błąd, uprzejmie daj mi znać.