1

複数のプロパティをオブジェクトに追加する場合、Object.defineProperties()通常、それらを で追加すると、1 つずつまたはグループで追加するよりもクリーンで読みやすいコードが生成されます。

ただし、プロパティが別のプロパティを参照している場合は、Object.defineProperties()それを処理できません。ダミーの例を考えてみましょう:

var foo = {};
Object.defineProperties(foo, {
    "one" : {value: 1, enumerable: true},
    "two" : {value: foo.one + 1, enumerable: true}
})
console.log(foo); // { one: 1, two: NaN }

var bar = {};
Object.defineProperties(bar,{
    "one" : {value: 1, enumerable: true}
}); 
Object.defineProperties(bar,{
    "two" : {value: bar.one + 1, enumerable: true}
});

console.log(bar); // { one: 1, two: 2 }

2番目のソリューションが常に機能することは明らかです。ただし、最初のものも他のものの省略形のように見え、とにかくプロパティの順次処理を示唆しているため、最初のもの同様に機能すると思われます。

これに関する明示的なドキュメントは見つかりませんでした。

質問は次のとおりです。

  • これは意図的な制限ですか、それともバックグラウンドでの技術的な複雑さですか?
  • それはどこかに文書化されていますか?
  • 実装固有または標準の動作ですか?

編集:明確に答えて、私のコメントも見てください。これは、Object.defineProperties() とは直接関係のない、単純なオブジェクト リテラルの問題です (問題ではなく、むしろ :) です。

4

1 に答える 1