gpt4 book ai didi

javascript - 将函数对象引用作为序列化 json 传递

转载 作者:行者123 更新时间:2023-11-28 08:59:33 24 4
gpt4 key购买 nike

我使用 jquery 小部件工厂编写了一些小部件。通常,我使用 JavaScript 代码块中的小部件构造函数传递选项和回调引用。

现在我想在自动生成的 html 页面中使用小部件并将选项传递给它们,而不使用 JavaScript block 。我在嵌入式 json 中指定选项,公共(public) JavaScript 代码块会解析这些选项并将其传递到小部件。

<div id="search_widget">
<script type="application/json">
{
"search": {
"search_string": "text to be searched",
"callback": "a function object in an outer scope"
}
}
</script>
</div>

如何将保留其范围的函数对象以 json 格式传递给小部件?然后,当满足条件时,小部件将调用指定的函数。

感谢您的帮助。

最佳答案

您可以将函数主体作为文本传递,但您的接收上下文必须知道它是一个函数,并使用 Function 构造函数(或其他东西)“重新构造”它。您无法保留“范围”,尽管这在 JSON block 中并没有多大意义。

您还可以传递函数名称、某些识别模式或您喜欢的任何其他内容,但前提是接收代码知道如何对其进行操作。

JSON 没有提供表示“函数”的机制。这个概念与格式完全不同,这是正确的,因为它的目的是与语言无关。

编辑 - 请注意,如果您按名称对函数进行编码:

<script type="application/json">
{
"search": {
"search_string": "text to be searched",
"callback": "search_callback_23"
}
}
</script>

然后,获取对象并解释内容的代码始终可以使用外部 JSON 对象作为上下文来调用该函数:

function handleJSON( the_JSON_from_the_example ) {
var json = JSON.parse(the_JSON_from_the_example);
if ("search" in json) {
var searchTerm = json.search.search_string;
var callback = findCallbackFunction(json.search.callback); // whatever
callback.call(json, searchTerm); // or json.search maybe?
}
}

换句话说,如果解释 JSON 编码信息的代码足以找到回调函数引用,那么它可能会在调用该函数时找到一个合适的对象用作 this .

关于javascript - 将函数对象引用作为序列化 json 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com