函数toString()不起作用

时间:2015-05-15 14:34:11

标签: javascript qt qml qt5

我在QML应用程序中使用Javascript,并希望将函数的代码插入为字符串:

function test(parameter) {
    console.log("Something to do!");
}
...
function otherFunction(otherParam) {
    console.log("Output: "+test.toString());
}

所有这一切都是为了打印以下内容:

"Output: function() { [code] }"

而不是所需的字符串:"Output: function() { console.log("Something to do!"); }"

P.S。:我记得这段代码最近有用,但在从Qt 5.2迁移到Qt 5.4并修复CMake脚本的某个地方,它破了。

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

应用于函数的

toString是一个实现细节。根据ECMA-262,它应该按照您的预期工作,但显然,实施后,它不会:(在任何情况下,标准允许它在实现之间以不同的方式工作。

您依赖于实现细节,然后更改了您的实现,因此您不应该感到惊讶。

如果您确实需要存储代码,可以通过eval生成函数 - 使用字符串,然后将代码添加为函数的属性。

根据5th edition of ECMA-262第15.3.4.2节,Function.prototype.toString()应该返回一个实现定义的格式为 FunctionDeclaration 的格式。因此,Qt的JS引擎可能会出现非标准行为。

答案 1 :(得分:0)

这似乎工作正常。

function test(parameter) {
    console.log("Something to do!");
}

function otherFunction(otherParam) {
    console.log("Output: "+test.toString());
  	document.getElementById('log').innerHTML = "Output: "+test.toString();
}

otherFunction("foo");
<p id="log"></p>

同时检查控制台日志。