函数 toString() 不工作
Function toString() not working
我在我的 QML 应用程序中使用 Javascript 并想插入函数的 code 作为字符串:
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 脚本的过程中,它坏了。
这里有什么问题?
这似乎工作得很好。
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>
还要检查控制台日志。
toString
应用于函数是一个实现细节。根据 ECMA-262,它应该像您预期的那样工作,但显然,在实施时,它不会 :( 无论如何,该标准允许它在实施之间以不同的方式工作。
您依赖于一个实现细节,然后更改了您的实现,所以您不应该感到惊讶。
如果确实需要存储代码,可以通过eval
-uating一个字符串生成函数,然后将代码添加为函数的属性。
根据 5th edition of ECMA-262,第 15.3.4.2 节,Function.prototype.toString()
应该 return 具有 FunctionDeclaration 语法的实现定义的再现。所以也许 Qt 的 JS 引擎在这里表现出非标准的行为。
我在我的 QML 应用程序中使用 Javascript 并想插入函数的 code 作为字符串:
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 脚本的过程中,它坏了。
这里有什么问题?
这似乎工作得很好。
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>
还要检查控制台日志。
toString
应用于函数是一个实现细节。根据 ECMA-262,它应该像您预期的那样工作,但显然,在实施时,它不会 :( 无论如何,该标准允许它在实施之间以不同的方式工作。
您依赖于一个实现细节,然后更改了您的实现,所以您不应该感到惊讶。
如果确实需要存储代码,可以通过eval
-uating一个字符串生成函数,然后将代码添加为函数的属性。
根据 5th edition of ECMA-262,第 15.3.4.2 节,Function.prototype.toString()
应该 return 具有 FunctionDeclaration 语法的实现定义的再现。所以也许 Qt 的 JS 引擎在这里表现出非标准的行为。