【问题标题】:QML - getting the code of a JS function as a stringQML - 将 JS 函数的代码作为字符串获取
【发布时间】:2015-11-21 20:51:06
【问题描述】:

似乎可以在JavaScript中获取函数的代码,并且很简单:

function foo() {...}
foo.toString()

但是,在 QML 中这样做给我带来了相当平淡的function () { [code] }

那么有没有办法获得[code] 部分呢?我也试过JSON.stringify(),但没有任何好处。

【问题讨论】:

  • 如果它是一个内置函数,显示代码就没有用了,因为它很可能是用 c++ 编写的。
  • 我得到每个函数的[code],无论它们是内置的,来自 c++ 还是自定义用户 JS 函数。
  • 这绝不是您问题的答案,但我想在这里提出警告。函数是javascript中抽象的基本手段。我可以看到能够在运行时检查函数代码对于测试和工具的用途是多么有用,但这将打破抽象障碍,并可能导致难以维护的紧密耦合代码。跨度>
  • 目的是将非js源码创建的动态组合的对象序列化成代码。可以对属性执行此操作,但不能对函数执行此操作。
  • 确实不是 js 兼容的环境。反正我从来没有注意到。

标签: javascript qt function qml tostring


【解决方案1】:

我想总结一下在 cmets 中发生的讨论,因为这可能是对未来搜索的一个很好的回应。

正如 cmets 中所述,它看起来是 QML 的一个明显错误。 Here 他们声称:

QML 运行时实现 ECMAScript 语言规范标准

其实不然。

感谢 Meetfe,here 是有关该问题的未解决错误的链接。

同样的错误似乎是here,他们建议查看参考以获取更多详细信息:

有关详细说明,请参阅 ECMA-262 规范。

这是(至少在我看来)完全兼容的声明,这让我再次想到了一个错误,而不是规范的部分实现。

因此,不幸的是,这是对函数进行字符串化的预期方法(确实有意义,因为它是一个符合 Ecmascript 的环境),但它在 QML 中无法正常工作,即使它应该如文档中所述。

【讨论】:

    【解决方案2】:

    http://doc.qt.io/qt-5/qtqml-javascript-functionlist.html#function-objects

    Function Properties
        toString()
        apply(thisArg, argArray)
        call(thisArg [, arg1 [, arg2, ...]])
        bind((thisArg [, arg1 [, arg2, …]])
    

    对于 JS-Functions,QT 不支持获取函数字符串的其他选项。但如果你解释你为什么想要它,我们也许可以找到另一个解决方案。

    【讨论】:

    • 您的示例甚至与 QML 无关。
    • 是的,对不起。我做了一个新的答案
    • 好的,我添加了重要的部分
    • 我已经在问题下方的 cmets 中解释了为什么我需要它。您引用的链接没有说明 QML 不支持此功能,根据 skypjack 引用的信息,这对于 ECMA 合规性是强制性的。
    • 因为你找不到关于不存在的一切的信息
    猜你喜欢
    • 2011-09-28
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多