0

この問題は、連想配列がリテラル定義を介してプログラムで並置されている場合にのみ発生します。リテラル定義で stringify を使用すると機能します。

理解しようとして、これを使用して文字通りの定義でテストしました。

var test = {
    voice : { state : 'Ready' }
};
console.log('Stringify test: ' + JSON.stringify(test));

そして、出力はまさに私が期待するものです:

Stringify test: {"voice":{"state":"Ready"}}

プログラムで初期化すると、これは起こりません。この変数は、私が作成したオブジェクトのプライベート メンバーであり、アクセサ/ゲッター メソッドを持っていることに注意してください。コンストラクター内には、次のものがあります。

var states = {};

this.getStates = function()
{
    return states;
}

this.setState = function(newState, mediaType)
{
    states[mediaType] = newState
}

今、私は同じテストを実行します。

customObj.setState('{ state: 'Ready' }', 'voice');
var test = customObj.getStates();

console.log('Stringify test: ' + JSON.stringify(test));

そして、出力は私が期待するものではありません:

Stringify Test: []

最後に、テスト変数の内容を再確認します。

for(var x in test)
{
    console.log('State in test: ' + x);
    console.log('Value of ' + x + ': ' + JSON.stringify(test[x])); 
}

そしてそれで私は得る:

State in test: voice
Value of voice: {"state":"Ready"}

OK、それは私が期待していたものが含まれていることを示していますが、stringify() はそれをフォーマットしません。今、私は何が起こっているのか少し混乱しています。

4

1 に答える 1

2

customObj をどのように作成しているかはわかりませんが、次のように動作します。

var CustomObj = function () {
    var states = {};

    this.getStates = function()
    {
        return states;
    }

    this.setState = function(newState, mediaType)
    {
        states[mediaType] = newState
    }
};

var customObj = new CustomObj();
customObj.setState({ state: 'Ready' }, 'voice');

var test = customObj.getStates();
console.log('Stringify test: ' + JSON.stringify(test));

以下を出力します。

Stringify test: {"voice":{"state":"Ready"}}
于 2013-05-09T15:34:00.453 に答える