Porównanie „tego” w JavaScript i tamtego „ja” w Pythonie
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ć.

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































