6

ブラウザーから表示および操作する多数のデータを含むいくつかのオブジェクトを使用しており、それをローカル ストレージに保存したいと考えています。オブジェクトを保存するために JSON.stringify() を使用したので、すべてがテキストになり、うまく機能します

{
"bindingRef": [],
"primo": {
    "name": "primo",
    "modifiable": true,
    "binded": false,
    "isInteger": false,
    "label": "Numero di Primi"
},
"secondo": {
    "name": "secondo",
    "modifiable": true,
    "binded": false,
    "isInteger": false,
    "label": "Numero di Secondi"
}
}

今、関数を文字列に変換してから保存することで、関数も保存しようとしています

JSON.stringify(myFunction.toString());

しかし、出力はこれです

"savedFunction": "function () {\n\t\t\t\tvar tot = menu.primo.get() * 6 + menu.secondo.get() * 8 + menu.dolce.get() * 4;\n\t\t\t\tif (menu.sconto.get()) {\n\t\t\t\t\treturn tot * 0.90;\n\t\t\t\t} else {\n\t\t\t\t\treturn tot;\n\t\t\t\t}\n\t\t\t}"

関数をローカルストレージに保存するのは正しい方法ですか、それとももっと良い方法がありますか? これが正しい方法である場合、集計/インデント文字を単純に削除する方法はありますか、または正規表現関数を使用するなどして文字列を操作する必要がありますか?

4

2 に答える 2

6

多くの関数型言語と同様に、JS の関数はクロージャーです。これらは、db やファイル ハンドルなどの一時的なデータを含む、定義の時点で環境スコープのコンテンツをクロージャー内にラップします。

JSON デシリアライゼーションの動作が原因で問題が発生する可能性があるため、お勧めできません。そのため、関数内でラップされているものと自己定義されているものを確認する必要があります。

詳細については、このSO スレッドも参照してください。

于 2012-06-16T13:04:29.530 に答える