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

267
Visualizações
Anular el constructor de objetos nativos globales de JavaScript ()

Estoy tratando de anular las llamadas de Object() en JavaScript, para interceptar y guardar todos los parámetros pasados al constructor de objetos.

No tengo acceso al código original ya que estoy ejecutando desde un código inyectado, pero ejecuto desde el mismo ámbito y comparto la misma window del código original.

Intenté este enfoque :

 (function (nativeObject) { window.Object = function (value) { if (value.magic) { window.myMagic = value.magic; } return nativeObject(value); } })(Object);

además de guardar la window.Object original en window.nativeObject y llamarlo desde mi gancho, pero en ambos sentidos termino obteniendo:

 TypeError: Object.defineProperty is not a function TypeError: Object.keys is not a function Uncaught (in promise) TypeError: Object.isExtensible is not a function Uncaught (in promise) TypeError: Object.create is not a function

¿Es porque my window.myMagic llama a los métodos Object para configurar la tecla myMagic en el objeto de la window ?

¿Es posible lo que estoy tratando de hacer?

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Voy a mostrar cómo reemplazar el constructor de Object con un proxy: necesitamos implementar trampas de apply y construct para las invocaciones de Object sin o con new .

 (nativeObject => { function Object(value) { if (value.magic) { globalThis.myMagic = value.magic; } return nativeObject(value); } globalThis.Object = new Proxy(nativeObject, { apply: (target, thisArg, args) => Object(...args), construct: (target, args) => Object(...args) }); })(Object); // Test new Object({ magic: 42 }); console.log(myMagic); // prints 42 Object({ magic: 'foo' }); console.log(myMagic); // prints "foo" console.log(Object.getOwnPropertyNames(Object)); // prints an array of property names

Solo tenga en cuenta que este método no funcionará con ninguna función predefinida, que puede requerir diferentes tratamientos para apply y construct . La función Object es un caso especial en el sentido de que se comporta de la misma manera con o sin new .

about 4 years ago · Santiago Trujillo Relatório

0

Está reemplazando Object con una función que no tiene ninguno de los métodos estáticos esperados. Llamar Object.defineProperties ya no funciona, es nativeObject.defineProperties lo que sería necesario.

Sin embargo, puede copiar fácilmente esas propiedades de la función nativa en su función de reemplazo para evitar romper el código que se basa en ellas:

 (function (nativeObject) { window.Object = function (value) { if (value.magic) { window.myMagic = value.magic; } return nativeObject(value); } for (const key of Reflect.ownKeys(nativeObject)) { // names and symbols const descriptor = nativeObject.getOwnPropertyDescriptor(nativeObject, key); nativeObject.defineProperty(Object, key, descriptor); } })(Object);
about 4 years ago · Santiago Trujillo 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