2015-09-04 84 views
0

我見過很多關於類似問題的問題,但我並沒有完全回答我的問題。javascript/jQuery存儲對象的cookie和檢索

我的問題是我需要存儲一個對象的整個實例,這意味着除了他的領域,我還需要其相關的方法。

我的代碼:

存儲對象

$.cookie(key, JSON.stringify(value), { expires: expire });

檢索對象

var value = $.cookie(key); if (value === null || value === undefined) { return value = ""; } return JSON.parse(value);

我從餅乾中得到的對象都有自己的網絡連接但該對象沒有我在存儲之前附加的方法。

只是讓你們/女士們可以瞭解對象我嘗試一起工作,我提供了以下小提琴:https://jsfiddle.net/5hhgtnxh/

回答

2

你根本無法保存方法或功能,而一些黑客以Cookie或本地存儲,JSON.stringify將省略僅保留數據的功能的密鑰。這是保存方法的必要條件嗎?他們已經在代碼中了。你可以在數據和方法上分割你的對象,只保存數據到cookie/localstorage。

順便說一下,因爲JSON不是用於Javascript,而是用於在不同系統或組件之間傳遞數據,它只是不允許函數作爲值。有關詳細格式規格,請參見http://json.org/

真正簡單的例子:

var CustomObject = function (data) { 
    var data = data; 
    this.getX = function() { 
    return data.x; 
    }; 
    this.setX = function (x) { 
    data.x = x; 
    }; 
    this.getData = function() { 
    return data; 
    }; 
}; 

var o = new CustomObject({}); 
o.setX(42); 
$.cookie('myObj', JSON.stringify(o.getData())); 

//later, let's initialize obj from cookie 

var custData = $.cookie('myObj'); 
var o2 = new CustomObject(custData); 
+0

好了,但我有一個包含「私」領域,我只想與thier「獲取」功能,以達到他們的多個對象。我仍然可以將函數附加到對象本身? ofc我不能只是創建一個新的對象,並將每個字段值複製到創建的對象,然後生病有功能,沒有任何其他方式?即使是一個好的解決方法也不錯。 –

+0

@OriRefael,看我的更新 – Andrey

+0

所以你剛剛創建了一個「複製」構造函數..試試看。 –