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

158
Visualizações
Cómo hacer referencia a la función que se está ejecutando actualmente dentro de un cuerpo de función en JavaScript

Estoy desarrollando una herramienta de instrumentación de código JavaScript.

Dado un fragmento de código, supongamos que necesito modificarlo para finalizar la siguiente tarea:

Tarea: Asignar una nueva propiedad a cada función cuando se invoca y acceder a la propiedad desde el cuerpo de la función.

Y solo puedo agregar nuevas líneas de código en el código original. NO se permiten otros cambios como la eliminación.

Teniendo en cuenta el siguiente ejemplo

 foo(); function foo() { // All functions are assumed to have names }

Puedo modificarlo agregando dos líneas de código como esta (básicamente asigno y accedo directamente a la propiedad agregada al referirme al nombre de la función):

 foo.prop = ...; // give foo a new property foo(); function foo() { console.log(foo.prop); // access the property }

Sin embargo, si hay otra función con el mismo nombre declarada dentro de foo , la solución anterior no funciona. Teniendo en cuenta el siguiente ejemplo.

 foo(); function foo() { // All functions are assumed to have names function foo() {...} }

Después de la modificación:

 foo.prop = ... // give foo a new property foo(); function foo() { console.log(foo.prop); // property does not exist! function foo() {...} }

Debido a la elevación de funciones, el foo externo se reemplaza por el foo interno, por lo tanto, no puedo acceder a la propiedad agregada usando el nombre de la función.

El uso de arguments.callee también puede fallar en modo estricto. Así que no es una opción para mí. ¿Hay algún método válido que pueda terminar esta tarea? ¿O es realmente imposible de hacer?

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

0

No estoy seguro si está buscando una vulnerabilidad o si esto es simplemente un ejercicio de aprendizaje. En cualquier caso, puede establecerlo en Object.prototype , y será heredado por foo ( y todos los demás objetos... que incluyen funciones ). Luego puede delete la propiedad cuando haya terminado con ella:

 Object.defineProperty(Object.prototype, 'prop', { configurable: true, enumerable: true, writable: true, value: 'bar', }); // invoke foo(); // "bar" const obj = {}; console.log('obj', obj.prop); // "obj" "bar" obj.prop = 'baz'; console.log('obj', obj.prop); // "obj" "baz" // "undefine" the prop delete Object.prototype['prop']; console.log('obj', obj.prop); // "obj" "baz" // invoke again foo(); // undefined function foo() { console.log(foo.prop); function foo() {} }

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede usar la función de bind aquí:

 function foo() { console.log("outer", this.prop); function foo() { console.log("inner", this.prop) } foo(); } const binded = foo.bind({prop: 2}); binded();

Esto establece el objeto this en una función a un valor específico. ¡Tenga en cuenta que este objeto es diferente en la función foo interna!

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