Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

268
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!