2012-04-13 22 views
2

我有以下情形:如何獲得具有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測試上述工作版本 - 所有這三個給了預期的效果。

回答

2

這是對我工作:

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 - 所有三個給出了預期的結果。

1

您需要將其應用到對象本身不是它的原型是這樣

var msp = function() { 
    this.val = 0.00; 
    this.disc = 0; 

}; 
msp.prototype.dif=function() {this.x = this.val - this.disc;return this;} 

var mp = new msp(); 
JSON.stringify(mp.dif()); 

然而,如果你試圖序列那是不可能的功能。

+0

不,這不太對,我需要序列化整個msp對象(mp)的實例。所以我想回到{「val」:0,「disc」:0,「x」:0} x當然是val和disc之間的區別(如果val = 10,disc = 1,那麼x應該是9)但重點是我需要全部三個變量序列化。 – mspisars 2012-04-13 01:08:58

+1

@mspisars好了,檢查一下,瞭解toJSON的功能https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON_behavior。我會更新我的答案,我認爲唯一的方法來得到你想要的。 – qw3n 2012-04-13 01:18:49

+0

@mspisars我編輯了答案。我不確定那是你想要的,但它會返回你想要的。 – qw3n 2012-04-13 01:30:30