Uma comparação de 'this' em JavaScript e 'self' em Python
Na programação orientada a objetos, thise selfsão usados para se referir à instância atual do objeto em que um método está sendo chamado.
Um objeto é uma estrutura de dados que contém campos de dados e métodos. Um objeto representa uma instância específica de uma classe, que é um modelo ou projeto para a criação de objetos.
Um método é uma função que está associada a um objeto e é usada para executar alguma ação ou computação no objeto. Os métodos são definidos em uma definição de classe e podem ser chamados em um objeto para executar uma tarefa específica.
Em JavaScript, a palavra- thischave se refere ao objeto atual que está executando a função atual. É uma maneira de acessar as propriedades e métodos de um objeto de dentro do próprio objeto. O valor de thisé determinado por como uma função é chamada.
Aqui está um exemplo de como thisé usado em JavaScript:
const person = {
name: 'John',
sayHi: function() {
console.log(`Hi, my name is ${this.name}`);
}
}
person.sayHi(); // Output: "Hi, my name is John"
Em Python, o selfparâmetro é usado para se referir à instância de uma classe. É equivalente a thisoutras linguagens orientadas a objetos. O selfparâmetro é usado para acessar os atributos e métodos de uma classe dentro da própria classe.
E aqui está um exemplo de como selfé usado em 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"
Um bug comum que pode ocorrer ao usar o selfparâmetro em Python é esquecer de incluí-lo como o primeiro parâmetro em uma definição de método. Isso pode fazer TypeErrorcom que a seja gerado quando o método é chamado, porque o método está esperando que o selfparâmetro seja passado.
Aqui está um exemplo desse tipo 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()
Para corrigir esse bug, precisamos incluir o selfparâmetro na definição do método assim:
def say_hi(self):
print(f"Hi, my name is {self.name}")
Depurando JavaScript
Um bug comum que pode ocorrer ao usar a palavra- thischave em JavaScript é usar thisdentro de uma função que não está vinculada a um objeto. Nesse caso, o valor de thisserá definido como o objeto global, o que pode levar a um comportamento inesperado.
Aqui está um exemplo desse tipo 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"
Quando chamamos a greetfunção, o valor de thisdentro da função é definido como o objeto global, que não possui uma namepropriedade. Como resultado, a saudação registra undefinedem vez do valor esperado.
Para corrigir esse bug, podemos vincular o valor de thisao personobjeto ao criar a greetvariável ou podemos usar uma função de seta para o sayHimétodo, que não possui seu próprio thisvalor e usa o thisvalor do contexto circundante.
Aqui está como poderíamos corrigir o exemplo usando o bindmétodo:
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"
Em JavaScript, a thispalavra-chave é usada para acessar as propriedades e métodos de um objeto de dentro do próprio objeto. Entender como o valor de thisé determinado e como usá-lo corretamente é essencial para trabalhar com objetos em JavaScript.
Em Python, o selfparâmetro é usado para referenciar a instância de uma classe e acessar seus atributos e métodos. Entender como usar o selfparâmetro corretamente é essencial para trabalhar com classes e programação orientada a objetos em Python.
Sem uma compreensão adequada de thisJavaScript e selfPython, é difícil escrever um código correto e sustentável que use objetos e classes.
Leia meu outro post ' Algumas coisas sobre JavaScript e Python ' para mais semelhanças e diferenças entre as duas linguagens de programação.
Obrigado por ler e espero que você tenha achado isso útil. Estou aberto a comentários e se você encontrar um erro, por favor, me avise.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)