Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

201
Visualizações
¿Por qué la propiedad de los constructores de objetos tiene un alcance global?

Dado lo siguiente:

 function MyClass() { this.name = "Agnus" return function() { console.log(this.name) } } const user = new MyClass() //this = "MyClass" const r = MyClass() //this = "window" console.log(name) //Agnus, this = "window" r() //Agnus, this = "window"

Mi expectativa era que al llamar a r (), obtendría un error ya que el valor de "esto" es una ventana para su caso, pero en su lugar me devolvió "Agnus". Al verificar, descubrí que las propiedades del constructor de objetos MyClass están disponibles en global.

ingrese la descripción de la imagen aquí

Tengo pocas dificultades para entender ese comportamiento, por lo que sería muy bueno si alguien pudiera explicarme un poco sobre esto.

Gracias por tu ayuda.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Cuando usa new , establece this en un nuevo objeto vacío cuyo prototipo interno es el .prototype del constructor. Eso es:

 new MyClass()
 function MyClass() { // `this` is now equivalent to Object.create(MyClass.prototype)

Pero si devuelve explícitamente un objeto de una función constructora, this esencialmente se descartará y se usará el objeto devuelto en su lugar. Aquí, el objeto devuelto es la función, y el

 this.name = "Agnus"

line se asigna a un objeto al que nunca se vuelve a hacer referencia.

Por el contrario, cuando no usa new y la función a la que llama no es una propiedad de un objeto (o una función de enlace o flecha), this será el objeto global (en modo descuidado) o undefined ( en modo estricto). En modo descuidado,

 function MyClass () { this.name = "Agnus"

lo hace

 window.name = "Agnus";

Y luego, cuando invoque la función devuelta más tarde con r() , dado que no es una propiedad de un objeto, this es el objeto global, cuyo name es Angus .

Para reducir la confusión, recomiendo

  • Evitar devolver objetos explícitamente de los constructores
  • Siempre usando new al invocar un constructor

No tienes que hacerlo, pero si lo haces, te confundirás a ti mismo (ya otros lectores del código) menos.

El modo estricto también es una buena idea.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda