使用 toString() 时如何格式化函数体
How to format the function body when using toString()
假设我从一个缩小的 JavaScript 文件中得到这个函数:
function fn(){console.log('Lorem');console.log('Ipsum');}
我想在调用时得到一个漂亮的打印缩进版本:
console.log(fn.toString());
预期输出:
function fn() {
console.log('Lorem');
console.log('Ipsum');
}
而不是:
function fn(){console.log('Lorem');console.log('Ipsum');}
无论如何都要这样做?
JavaScript 没有执行此操作的内置函数。因此,如果您想以编程方式进行漂亮的打印,则必须手动进行。
要获取函数的源代码,有一个非标准的 Function.prototype.toSource()
函数,不过它仅受 Firefox 支持。涵盖您的示例的一个非常简单的漂亮打印函数是:
function prettyPrint(source) {
let formattedSource = fn.toSource ? fn.toSource() : "";
// Add line breaks after curly braces and semicolons
formattedSource = formattedSource.replace(/([{};])/g, "\n");
// Add space after opening curly brace
formattedSource = formattedSource.replace(/(\S)\{/g, " {");
// Indent lines ending with a semicolon
formattedSource = formattedSource.replace(/^(.*?);/gm, " ;");
return formattedSource;
}
console.log(prettyPrint(fn));
综上所述,不同的开发人员工具集成了选项,可以在其调试器中漂亮地打印 JavaScript 源代码。
Firebug:
Firefox 开发者工具:
Chrome 开发工具:
js-beautify
库在漂亮的打印 JS 代码方面做得非常好
https://github.com/beautify-web/js-beautify
// Script inclusion
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', 'https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.6.4/beautify.js', false);
xmlHttp.send(null);
var jsCode = xmlHttp.responseText;
var script = document.createElement("script");
script.innerHTML = jsCode;
document.head.appendChild(script);
// Usage
function fn(){console.log('Lorem');console.log('Ipsum');}
js_beautify(fn.toString());
// Output
function fn() {
console.log('Lorem');
console.log('Ipsum');
}
假设我从一个缩小的 JavaScript 文件中得到这个函数:
function fn(){console.log('Lorem');console.log('Ipsum');}
我想在调用时得到一个漂亮的打印缩进版本:
console.log(fn.toString());
预期输出:
function fn() {
console.log('Lorem');
console.log('Ipsum');
}
而不是:
function fn(){console.log('Lorem');console.log('Ipsum');}
无论如何都要这样做?
JavaScript 没有执行此操作的内置函数。因此,如果您想以编程方式进行漂亮的打印,则必须手动进行。
要获取函数的源代码,有一个非标准的 Function.prototype.toSource()
函数,不过它仅受 Firefox 支持。涵盖您的示例的一个非常简单的漂亮打印函数是:
function prettyPrint(source) {
let formattedSource = fn.toSource ? fn.toSource() : "";
// Add line breaks after curly braces and semicolons
formattedSource = formattedSource.replace(/([{};])/g, "\n");
// Add space after opening curly brace
formattedSource = formattedSource.replace(/(\S)\{/g, " {");
// Indent lines ending with a semicolon
formattedSource = formattedSource.replace(/^(.*?);/gm, " ;");
return formattedSource;
}
console.log(prettyPrint(fn));
综上所述,不同的开发人员工具集成了选项,可以在其调试器中漂亮地打印 JavaScript 源代码。
Firebug:
Firefox 开发者工具:
Chrome 开发工具:
js-beautify
库在漂亮的打印 JS 代码方面做得非常好
https://github.com/beautify-web/js-beautify
// Script inclusion
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', 'https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.6.4/beautify.js', false);
xmlHttp.send(null);
var jsCode = xmlHttp.responseText;
var script = document.createElement("script");
script.innerHTML = jsCode;
document.head.appendChild(script);
// Usage
function fn(){console.log('Lorem');console.log('Ipsum');}
js_beautify(fn.toString());
// Output
function fn() {
console.log('Lorem');
console.log('Ipsum');
}