簡體   English   中英

將函數對象引用作為序列化的json傳遞

[英]Passing function object references as serialized json

我已經使用jquery小部件工廠編寫了一些小部件。 通常,我使用JavaScript代碼塊中的小部件構造函數傳遞選項和回調引用。

現在,我想在自動生成的html頁面中使用小部件,並在不使用JavaScript塊的情況下將選項傳遞給它們。 我在嵌入式json中指定了選項,該選項由一個普通的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塊中這並不意味着什么。

您也可以傳遞函數名稱,某種識別模式或您喜歡的其他任何東西,但前提是接收代碼知道如何執行此操作。

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對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM