¿En qué motores de Javascript Function.prototype.toString no devuelve el código fuente de esa función?

EDITAR: Para ser explícito, no estoy buscando consejos u opiniones sobre el mérito cualitativo de los diversos problemas implicados por la funcionalidad en cuestión, tampoco estoy buscando una solución confiable para un problema práctico; Simplemente estoy buscando respuestas técnicas y verificables a la pregunta en el título. He adjuntado la pregunta con una lista de navegadores no conformes.

Usando una función.toString método será típicamenteprocesar el código fuente para esa función. El problema es que este comportamiento.no está especificado - la especificación se abstiene de hacer cualquier compromiso en cuanto a cuál debería ser el comportamiento cuando se aplica a las funciones. La consola de Chrome incluso le dirá (cuando pase algo que no sea una función paraFunction.toString.call), eseFunction.prototype.toString no es genérico

Esta entrada de blog sugiere que esto se puede usar como un método para producir una sintaxis legible para cadenas de varias líneas (almacenando la cadena como un comentario de varias líneas en el cuerpo deuna función no operativa). El autor sugiere este uso en el contexto de la escritura.Node.js las aplicaciones con la cláusula de que este comportamiento solo es confiable porque Node.js se ejecuta en un entorno controlado. Pero en la web nativa de Javascript, cualquier cosa puede venir e interpretarlo, y no debemos confiar en un comportamiento no especificado.

En la práctica, sin embargo,He creado un violín que muestra un cuadro de selección cuyo contenido está determinado por una gran cadena multilínea para probar el código, y cada navegador en mi estación de trabajo (Chrome 27, Firefox 21, Opera 12, Safari 5, Internet Explorer 8) se ejecuta según lo previsto.

¿Qué motores actuales de Javascript?no hacer comportarse como sigue?

Dado que:

function uncomment(fn){
  return fn.toString().split(/\/\*\n|\n\*\//g).slice(1,-1).join();
}

El seguimiento:

uncomment(function(){/*
erg
arg
*/});

Debe salir:

erg
arg
Lista de navegadores no conformes:Firefox 16…

Respuestas a la pregunta(2)

Su respuesta a la pregunta