2017-08-11 360 views
1

我試圖在localStorage中保存數組,但它包含數組對象中的函數(稱爲promise),但是當我使用JSON.stringify將數組轉換爲字符串時出現問題,顯然所有函數被刪除,當我解析字符串到JSON Object它沒有方法。如何在localStorage API中保存函數HTML5

/* Example code */ 
 

 
var storage = { 
 
\t getListUsers: function(){ 
 
\t \t return { 
 
\t \t \t name: 'name', 
 
\t \t \t age: 'age' 
 
\t \t } 
 
\t }, 
 
\t active: true, 
 
\t data: [] 
 
} 
 

 
var convert = JSON.stringify(storage); 
 
localStorage.setItem('data', convert);

最好的問候。

+0

使用可選的第二個參數'JSON.stringify'的'replacer'功能 - 以及可選的第二個參數'JSON.parse'時, 'reviver'函數 - 儘管這將會是一個挑戰 –

+0

*「它包含函數(稱爲promise)」​​ - 你是在談論在你的'storage.data'數組中的promise嗎? (也就是說,在問題中沒有真正顯示的承諾?) – nnnnnn

+0

我將邏輯從數據中分離出來,而不是在本地存儲中存儲函數。當你在人們的瀏覽器中散佈大量代碼時,很難爲初學者升級代碼版本。爲什麼在對象從localStorage重新水化之後不能添加函數(通過擴展或其他方法)? – flyer

回答

1

幾點意見:

  • 功能不JSON存在。查看官方文件json.org
  • 值可以是在雙引號一個stringnumber,或truefalsenullobjectarraynot a method
  • 爲什麼JSON對象內的方法?方法基本上用於操縱數據。您也可以使用JSON對象之外的數據。

您可以使用JSON.stringify replacer函數將函數轉換爲字符串,同時轉換爲JSON字符串。

DEMO

var storage = { 
 
\t getListUsers: function() { 
 
\t \t return { 
 
\t \t \t name: 'name', 
 
\t \t \t age: 'age' 
 
\t \t } 
 
\t }, 
 
\t active: true, 
 
\t data: [] 
 
} 
 

 
var json = JSON.stringify(storage, function(key, value) { 
 
    if (typeof value === 'function') { 
 
    return value.toString(); 
 
    } else { 
 
    return value; 
 
    } 
 
}); 
 

 
console.log(json);

+0

如何重新將此字符串轉換爲一個函數,因爲它之前? – Nezih

0

您可以設置應當在localStorage被設置爲<script>元素的.textContent的JavaScript中,到達設定localStorage元素的.textContent。然後,您可以在不同的<script>元素上設置相同的文本,或將文本轉換爲data URI,該文本可以發佈到其他瀏覽上下文或服務器。

<script id="storage"> 
/* Example code */ 

var storage = { 
    getListUsers: function() { 
    return { 
     name: 'name', 
     age: 'age' 
    } 
    }, 
    active: true, 
    data: [] 
} 
</script> 
<script> 
var convert = document.getElementById("storage"); 

localStorage.setItem("data", convert.textContent); 

console.log(localStorage.getItem("data"));  
</script>