Сравнение «этого» в JavaScript и того «я» в Python

Dec 19 2022
В объектно-ориентированном программировании this и self используются для ссылки на текущий экземпляр объекта, для которого вызывается метод. Объект — это структура данных, которая содержит поля данных и методы.
Фото Ди Белла Кофе

В объектно-ориентированном программировании 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 », чтобы узнать больше о сходствах и различиях между двумя языками программирования.

Спасибо за чтение и, надеюсь, вы нашли это полезным. Я открыт для обратной связи, и если вы обнаружите ошибку, пожалуйста, сообщите мне об этом.