0

私は次のようなオブジェクトを持っています

var Profile = Object.create(null);
Object.defineProperties(Profile, {
    id: {
        value: "",
        enumerable: true
    },
    name: {
        value: "",
        enumerable: true
    },
    active: {
        value: true,
        enumerable: true
    }
});

ここで、Profile インスタンスを作成して ID と名前を付け、アクティブなデフォルトを true のままにしたいので、次のようにします。

var p1 = Object.create(Profile, {
    id: {
        value: "123",
        enumerable: true
    },
    name: {
        value: "hello world",
        enumerable: true
    }
});

次に、p1という名前のオブジェクトを取得しましたが、「アクティブ」が見つかりません

Object.getOwnPropertyNames(p1);

また、JSON.stringify(p1) を使用してプロパティ「アクティブ」をシリアル化することはできませんが、プロパティ「アクティブ」をシリアル化できる必要があります。

これは Object.create の使い方が間違っているのでしょうか? シリアライズ可能な「クラス」を作成し、シリアライズ可能な「インスタンス」を取得したいだけです。これどうやってするの?

4

2 に答える 2

1

getOwnPropertyNames の MDN ページから:

指定されたオブジェクトで直接見つかったすべてのプロパティ (列挙可能かどうかに関係なく) の配列を返します。

アクティブなプロパティは、p1 ではなく、p1 の proto オブジェクトにあります。

for inコンストラクトを使用して、p1 のすべてのプロパティ (プロトタイプ チェーンのプロパティを含む) を反復処理できます。フラット オブジェクトを作成するには、次のようにします。

for (var key in obj) {
  if (!obj.hasOwnProperty(key)) {
    obj[key] = obj[key];
  }
}

Object.getOwnPropertyNames: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

for in: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

Object.create: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

于 2013-09-20T12:22:05.323 に答える