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

174
Views
¿Cómo vincular console.log a otra llamada de función para poder ver el número de línea del script en la consola donde se llama?

Mi código funciona pero con paréntesis adicionales como myfunction()(); . Debería ejecutarse con un solo paréntesis como de costumbre, por ejemplo myfunction(); .

Estoy construyendo console.time(); console.timeEnd(); polyfill para navegadores (p. ej., <IE10) que no tienen nativo incorporado. Nota: Tengo polyfill bind() en caso de que creas que <IE10 no lo tiene.

Aquí está mi código en "archivo polyfill.js".

 (function() { 'use strict'; var console=window.console, timers={}; if (!console.time) { console.time = function(name) { var datenow = Date.now(); name = name? name: 'default'; if (timers[name]) { console.warn('Timer "'+name+'" already exists.'); } else timers[name] = datenow; }; console.timeEnd = function(name) { var datenow = Date.now(); name = name? name: 'default'; if (!timers[name]) { console.warn('Timer "'+name+'" does not exists.'); } else { var endt = datenow - timers[name]; delete timers[name]; //below is the line where some changes are needed, But I don't know how. return window.console.log.bind(window.console, name+ ': ' +endt+ 'ms'); } }; } }());

Ahora en otro archivo "archivo main.js", cuando uso console.time(); console.timeEnd(); , debe registrar el número de línea de código de este archivo en la consola del navegador (no el número de línea del archivo polyfill.js). Por supuesto que funciona, pero observe el paréntesis adicional "()()" debajo del cual no está bien.

 console.time(); //any code for performance test goes here. console.timeEnd()(); //Note here "()()". It should be single "()"

He consultado estas 2 preguntas de stackoverflow, pero no pude encontrar la respuesta correcta.

  • ¿Envolviendo un contenedor del registro de la consola con el archivo/número de línea correcto?
  • ¿Un contenedor adecuado para console.log con el número de línea correcto?

También revisé new Error().stack; como una opción, pero tampoco es compatible con aquellos navegadores para los que estoy creando mi polyfill.

Nota: Si alguien puede sugerir una solución con eval(); , puedes. También es aceptable para mí.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

De hecho, hay una función para eso llamada console.trace , sobre la cual puedes leer más en la página de MDN . Lo que hace es imprimir todo el seguimiento de la pila hasta la línea desde donde se ha llamado.

Entonces, por ejemplo, ejecutando el siguiente código:

 function firstFunc() { secondFunc(); } function secondFunc() { console.trace('I was called here!'); } console.log('Calling firstFunc:'); firstFunc();

imprimirá esta salida en la consola:

 Calling firstFunc: I was called here! secondFunc @ VM141:6 firstFunc @ VM141:2 (anonymous) @ VM141:10 // Internal browser trace

Tenga en cuenta que en el resultado dado, todas las funciones se llaman y definen en la consola de Chrome, por lo tanto, @ VM141: . Generalmente, imprime el archivo en lugar de VM. Entonces, si se hubiera ubicado en un archivo index.js , se vería así:

 Calling firstFunc: I was called here! secondFunc @ index.js:8

Nota de compatibilidad

El método anterior funciona para cualquier navegador cuerdo e IE11+. Eso se debe a la implementación de console.trace solo en IE11. Sin embargo, según la solicitud de OP, puedo pensar en una forma creativa de admitir IE10, y eso es mediante el uso de la propiedad Error.prototype.stack . Ahora, por supuesto, como lo menciona el mismo MDN, es una característica no estándar que no debe usarse en producción, pero tampoco es compatible con IE6.

Al crear una instancia de Error y luego imprimir su pila, puede lograr un resultado similar.

 const sumWithTrace = (num1, num2) => { console.log(new Error().stack); // Creating a new error for its stack property return num1 + num2; }; sumWithTrace(1, 5); // returns 6 and prints trace in console
about 4 years ago · Juan Pablo Isaza 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!