我有以下情形:如何獲得具有get /屬性設定JSON.stringify()來序列
var msp = function() {
this.val = 0.00;
this.disc = 0;
};
Object.defineProperty(msp.prototype, "x", {
get: function() {return this.val - this.disc;},
toJSON: function() {return this.val - this.disc;},
enumerable: true,
configurable: true
});
var mp = new msp();
JSON.stringify(mp); // only returns {"val":0,"disc":0}
我希望我能以某種方式設置屬性「×」的toJSON一個方法在defineProperty調用中,但沒有奏效。
任何幫助,將不勝感激。
UPDATE: 這是我工作:
var obj = function() {
this.val = 10.0;
this.disc = 1.5;
Object.defineProperties(this, {
test: {
get: function() { return this.val - this.disc; },
enumerable: true
}
});
};
var o = new obj;
o.test;
8.5
JSON.stringify(o); // output: {"val":10,"disc":1.5,"test":8.5}
注測試不是一個原型定義和枚舉有設置爲真。
我在IE9中,FF 11和Chrome 18測試上述工作版本 - 所有這三個給了預期的效果。
不,這不太對,我需要序列化整個msp對象(mp)的實例。所以我想回到{「val」:0,「disc」:0,「x」:0} x當然是val和disc之間的區別(如果val = 10,disc = 1,那麼x應該是9)但重點是我需要全部三個變量序列化。 – mspisars 2012-04-13 01:08:58
@mspisars好了,檢查一下,瞭解toJSON的功能https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON_behavior。我會更新我的答案,我認爲唯一的方法來得到你想要的。 – qw3n 2012-04-13 01:18:49
@mspisars我編輯了答案。我不確定那是你想要的,但它會返回你想要的。 – qw3n 2012-04-13 01:30:30