我已經看到了非常類似的問題,但我不能確定他們是否清楚地回答 - 也許我有點緊張,對不起。自定義對象到JSON然後返回到自定義對象?
我想讓自己的對象具有方便性(清晰度),稱之爲CardboardBox()
。它不會包含代碼,只包含數據。我想將它寫入數據庫並稍後再讀取,但很明顯,它在讀回時是Object()
。所有我能想到的,找出它曾經是是:
- 有一個成員變量
type
我設置爲CARDBOARD_BOX - 實例化一個新
CarbardBox()
和使用的功能(在框中)複製Object()
的屬性到新的CardboardBox()
對象
有沒有更好的方法來做到這一點?我很確定我可以更改實際的類型。
function CardboardBox() {
this.type = "CARDBOARD_BOX"
this.name = "No set";
this.populate = new function(obj) {
// populate this object with obj properties
}
var box = new CarboardBox(); // CarboardBox
box.name = "My Box";
send = JSON.stringyfy(box);
.
.
.
obj = JSON.parse(send); // Object
if (obj.type == "CARDBOARD_BOX") {
savedBox = new CardboardBox();
savedBox.populate(obj);
}
在此先感謝... 史蒂夫
[編輯]我的測試代碼。
function CardboardBox(n) {
this.name = n;
}
var box = new CardboardBox("My Box");
send = JSON.stringify(box); // JSON CarboardBox()
obj = JSON.parse(send, function fn(obj) { // Object() returned
log("OB: "+obj.type);
return obj.type === 'CardboardBox' ? new CardboardBox(obj) : CardboardBox;
});
console.log(obj);
輸出是:
OB: undefined utils.js:40
OB: undefined utils.js:40
function CardboardBox(n) {
this.name = n;
}
看看JSON.parse和JSON.stringify參數。您可以爲每個對象定製回調。 'JSON.parse(obj,fn);函數fn(obj){return obj.type ==='a'?新的A(obj):a;如果我有時間的話,我會寫一個正確的答案。抱歉。 –
感謝您的回覆。非常感謝,但我現在更加困惑。如果我在'CardboardBox()'中使用函數(fn),那麼從'JSON.parse()'返回的是'CarboardBox()'的構造函數。 'obj.type'總是未定義的。我想我錯過了一些東西...... – Steve
@Steve:你必須設置'.type',並且你沒有正確地使用參數(第一個參數不是'obj',因爲建議)。請參閱http://jsfiddle.net/LSUJ9/。 – pimvdb