Aparentemente, esto podría parecer un duplicado... pero déjame explicarte el problema.
Por el bien de la pregunta, TODO lo que puedo suponer es que mi código se ejecutará, no sé nada sobre los módulos (si son falsos o algo así) y solo puedo confiar en las cosas que se configuran en instancias que solo mi código controlará (o establecerá originalmente que no se pueden configurar)
Lo que quiero hacer es, como dice mi encabezado, convertir una función en una cadena. Sin embargo, todos mis intentos de conversión dependen de un módulo que el cliente puede sobrescribir.
Function.prototype.toString=()=>"pwned" //work of the client //failed attempts to convert to string below console.log(`${Object.keys}`) //"pwned" console.log(Object.keys+'') //"pwned" console.log(Object.keys.toLocaleString()) //"pwned"Comenzando con la única suposición que estoy haciendo (que mi código se está ejecutando), probé esto a continuación, sin embargo, devuelve indefinido (pensé que devolver nada de alguna manera lo convertiría en la cadena predeterminada)
//infinityLoop is a function I write(all this is inside another self calling function) and the name suggests what it does //the concept in this example is to run the code and if it smells anything suspicious, infinite loop try{(function(href){ var symbol=Symbol.toPrimitive, c=1, here=arguments.callee var testObj={[symbol]:function(){return here===arguments.callee.caller?c++:infinityLoop()}} if(testObj-0!==1 || c!==2){throw "bruh"} function str(item){ var measure=null, unit={}, count=0 function verifier(hint){ const condition=hint!=="default" || this!==item || verifier.caller!==str || count!==0 if(condition){infinityLoop()} else{ measure=unit; count++ } } item[symbol]=verifier; const string=item+'' if(measure!==unit || count !==1){throw "bruh"} delete item[symbol]; return string } str(Object.keys) //"undefined" //I get to control the conversion but I still can't convert it ;-; })()}catch{infinityLoop()}¿Es posible convertir una función en una cadena sin módulos sobrescribibles o es una pregunta ridícula e imposible?
Esto no es posible.
Si no controla ni confía en el entorno que ejecuta el código, tampoco puede controlar ni confiar en lo que hace el código.