【发布时间】:2014-02-09 19:50:31
【问题描述】:
我有一些代码(无论下面的 jsToBeConverted 函数的主体内是什么),我希望能够将其转换为文本,以便用户可以复制它,然后将其粘贴到<script> 元素在他们的网站上,以便执行。
someElement.onclick = function ()
{
var textForUserToCopy = (function ()
{
x = document.getElementById('someInput').value;
var jsToBeConverted = function ()
{
var y = x + 6;
var z = function (a)
{
return (a + 5);
};
window.d = z(y);
};
var jsToExecute = "(" + jsToBeConverted + ")();"
return jsToExecute;
})();
};
但是这会生成以下文本:
"(function ()
{
var y = x + 6;
var z = function (a)
{
return (a + 5);
};
window.d = z(y);
})();"
但这不是我想要的。如果对上述内容进行评估,x 显然是未定义的。 我想要的是将 x 替换为其当时的值,然后将 js 转换为文本。所以如果 x 的值恰好是 123,那么生成的文本应该是这样的:
"(function ()
{
var y = 6 + 6;
var z = function (a)
{
return (a + 5);
};
window.d = z(y);
})();"
如果上面的字符串被评估 - window.d 将是 17
是否有一些标准函数/过程用于生成/将动态代码转换为文本?
谢谢
【问题讨论】:
-
为什么要这样做?这似乎是 XY Problem 的教科书示例。
-
我正在构建一个应用程序,该应用程序需要一些用户输入,并在此基础上生成一些代码供用户粘贴到
<script>中。 -
x总是一个数字,还是可以是不同的类型?如果有,可能是什么类型? -
在这种情况下,它只能是一个数字——但这只是一个例子。实际要转换的代码可能长 10 倍,动态值的数量和它们的类型一样大。
-
嗯,JS 没有通用的“uneval”或“inspect”,所以你将不得不手动处理每种类型......(见答案)
标签: javascript eval