複数のプロパティをオブジェクトに追加する場合、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() とは直接関係のない、単純なオブジェクト リテラルの問題です (問題ではなく、むしろ :) です。