0

置換関数内で列挙できないプロパティをシリアル化しようとしています。

ここで何が問題なのですか?

助けてください。

var obj = {x:1,y:2};
Object.defineProperty(obj,"x",{enumerable:false});


var s = JSON.stringify(obj,function(key,value){
if(this.propertyIsEnumerable(key) == false){
Object.defineProperty(this,key,{enumerable:true});
}
return value;});

//"{"y":2}"
// x remains not enumerable

置換関数の実行前に、列挙できないプロパティが除外されていると思います。わからない。

4

1 に答える 1

1

列挙不可能なプロパティを除外する場合.stringify、はい、それらはコールバックで使用できません - そのフィルターは既に実行されています。文字列化する前にオブジェクトのすべてのキーをループして、内部のロジックを使用して、まだ列挙可能でない場合は列挙可能として設定してみませんか。次に、単に呼び出すだけですJSON.stringify(obj);。残念ながら、あなたが指摘したように、for inループとjQuery$.eachは列挙不可能なキーをループしません。.getOwnPropertyNamesあなたが望むものを達成するはずです- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

あなたが提供したコードに似た、それを使用する例を次に示します。

http://jsfiddle.net/9Em82/

var obj = {x:1,y:2};

Object.defineProperty(obj,"x",{enumerable:false});

var all = Object.getOwnPropertyNames(obj);
for (var i = 0, j = all.length; i < j; i++) {
    console.log("KEY: " + all[i]);
}
于 2012-11-25T08:15:23.243 に答える