Сравнение «этого» в JavaScript и того «я» в Python
В объектно-ориентированном программировании thisи selfоба используются для ссылки на текущий экземпляр объекта, для которого вызывается метод.
Объект — это структура данных, которая содержит поля данных и методы. Объект представляет собой конкретный экземпляр класса, который является шаблоном или планом для создания объектов.
Метод — это функция, связанная с объектом и используемая для выполнения некоторого действия или вычисления над объектом. Методы определены в определении класса и могут быть вызваны для объекта для выполнения конкретной задачи.
В JavaScript thisключевое слово относится к текущему объекту, выполняющему текущую функцию. Это способ доступа к свойствам и методам объекта изнутри самого объекта. Значение thisопределяется тем, как вызывается функция.
Вот пример того, как thisиспользуется в JavaScript:
const person = {
name: 'John',
sayHi: function() {
console.log(`Hi, my name is ${this.name}`);
}
}
person.sayHi(); // Output: "Hi, my name is John"
В Python selfпараметр используется для ссылки на экземпляр класса. Это эквивалентно thisдругим объектно-ориентированным языкам. Параметр selfиспользуется для доступа к атрибутам и методам класса из самого класса.
А вот пример того, как selfиспользуется в 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"
Одна распространенная ошибка, которая может возникнуть при использовании selfпараметра в Python, заключается в том, что вы забыли включить его в качестве первого параметра в определение метода. Это может привести TypeErrorк возникновению a при вызове метода, потому что метод ожидает selfпередачи параметра.
Вот пример ошибки такого типа:
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()
Чтобы исправить эту ошибку, нам нужно включить selfпараметр в определение метода следующим образом:
def say_hi(self):
print(f"Hi, my name is {self.name}")
Отладка JavaScript
Одна распространенная ошибка, которая может возникнуть при использовании thisключевого слова в JavaScript, — это использование thisвнутри функции, которая не привязана к объекту. В этом случае значение thisбудет установлено на глобальный объект, что может привести к непредвиденному поведению.
Вот пример ошибки такого типа:
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"
Когда мы вызываем greetфункцию, значение thisвнутри функции устанавливается на глобальный объект, у которого нет nameсвойства. undefinedВ результате вместо ожидаемого значения регистрируется приветствие .
Чтобы исправить эту ошибку, мы можем либо привязать значение thisк personобъекту при создании greetпеременной, либо использовать стрелочную функцию для sayHiметода, который не имеет собственного thisзначения и использует thisзначение окружающего контекста.
Вот как мы могли бы исправить пример, используя bindметод:
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"
В JavaScript thisключевое слово используется для доступа к свойствам и методам объекта изнутри самого объекта. Понимание того, как определяется значение thisи как его правильно использовать, необходимо для работы с объектами в JavaScript.
В Python selfпараметр используется для ссылки на экземпляр класса и доступа к его атрибутам и методам. Понимание того, как правильно использовать selfпараметр, необходимо для работы с классами и объектно-ориентированного программирования в Python.
Без надлежащего понимания thisJavaScript и selfPython сложно написать правильный и удобный для сопровождения код, использующий объекты и классы.
Прочитайте мой другой пост « Несколько вещей о JavaScript и Python », чтобы узнать больше о сходствах и различиях между двумя языками программирования.
Спасибо за чтение и, надеюсь, вы нашли это полезным. Я открыт для обратной связи, и если вы обнаружите ошибку, пожалуйста, сообщите мне об этом.

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































