1

を使用してオブジェクトbから新しいオブジェクトを作成しようとしましたaObject.create

var a ={}; 
var b = Object.create( a );

a.n = 1;
b.m = 2;

for .. in ..正しい値を表示することで2つのオブジェクトを反復すると。しかし、JSON.stringify は正しい文字列を出力しません。

JSON.stringify( b )

のように印刷されるはず{"n":1,"m":2}です。しかし、それだけのように印刷されます{"m":2}。なぜ何か提案はありますか?

jsfiddleに追加しました 。jsfiddle のリンクhttp://jsfiddle.net/V3Nxs/

4

3 に答える 3

4

これはn、 が のプロトタイプ プロパティでbあり、オブジェクトJSON.stringifyに対して true を返すプロパティに対してのみ機能するためです。hasOwnProperty

于 2013-05-16T11:57:13.753 に答える
1

私はあなたのフィドルを更新しました

http://jsfiddle.net/V3Nxs/2/

for( var k in b ){
    if (!b.hasOwnProperty(k)) continue;
    html.push( 'b.'+ k +':' + b[k] );
}
  1. hasOwnProperty を使用する必要があります
  2. 2番目のforループのインデックスを変更しました

Object.create の動作を見ると、渡す最初の引数は新しいオブジェクトのプロトタイプです。つまり、 b は a が持つすべてのものをプロトタイプチェーンに持っています。hasOwnProperty は、テストされたプロパティがプロトタイプ チェーンのどこかではなく、オブジェクト自体にある場合にのみ true を返すため、これを修正します。

今はあなたが期待していると思うように動作します。

于 2013-05-16T11:57:23.153 に答える
0

b.n定義されていないことは、予期される動作です。欲しいものを手に入れるには、これを試してみてください。

var a = {};
var b = {a:a};

a.n = 1;
b.m = 2;

b.a.n設定され、出力に含まれるようになりました1JSON.stringify

于 2013-05-16T11:57:10.473 に答える