EDIT: Чтобы быть явным, я не ищу советов или мнений о качественных достоинствах различных вопросов, связанных с функциональностью, о которой идет речь, и я не ищу надежного решения практической проблемы; Я просто ищу технические, поддающиеся проверке ответы на вопрос в названии. Я добавил вопрос со списком несоответствующих браузеров.
Использование метода .toString
обычно будет отображать исходный код для этой функции. Проблема в том, что это поведение не указано - спецификация воздерживается от принятия каких-либо обязательств относительно того, какое поведение должно быть при применении к функциям. Консоль Chrome даже скажет вам (когда вы передаете что-либо, кроме функции Function.toString.call
), этот Function.prototype.toString не является общим
В этом сообщении в блоге предлагается, что это можно использовать как метод для создания читаемого синтаксиса для многострочных строк (путем хранения строки в виде многострочного комментария в тело функция no-op). Автор предлагает это использование в контексте написания приложений Node.js с условием, что это поведение является только надежным, поскольку Node.js работает в контролируемой среде, Но в родной сети Javascript все может прийти и интерпретировать его, и мы не должны полагаться на неуказанное поведение.
На практике, однако, я установил скрипку, которая отображает окно выбора, содержимое которого определяется большой многострочной строкой для проверки кода и каждый браузер на моей рабочей станции (Chrome 27, Firefox 21, Opera 12, Safari 5, Internet Explorer 8) выполняется по назначению.
Какие текущие двигатели Javascript не ведут себя следующим образом?
Учитывая, что:
function uncomment(fn){
return fn.toString().split(/\/\*\n|\n\*\//g).slice(1,-1).join();
}
Следующее:
uncomment(function(){/*
erg
arg
*/});
Должен вывести:
erg
arg
Список несоответствующих браузеров:
- Firefox 16
- ...