Object.assignを使用してトップレベルのプロパティが矛盾している場合にエラーをスローする方法はありますか?または、手動で機能を記述する必要がありますか?Object.assignだが名前が衝突するとエラーが発生する
答えて
トップレベルのプロパティが衝突している場合、それはエラーをスローするようにObject.assignを使用する方法はありますか?
いいえあなたが求めているのは、Object.assign()
の機能ではありません。
また、手動で機能を記述する必要がありますか?
はい、あなた自身で作成するか、他の誰かがすでに作成したものを見つける必要があります。トップレベルのソースプロパティが既にターゲット上のプロパティと一致する場合にスローされる別の関数を次に示します。
function mergeObjects(target, ...sources) {
let originalProperties = new Set(Object.keys(target));
// preflight for any top-level property name conflicts so we can throw before copying anything
for (let src of sources) {
for (let prop of Object.keys(src)) {
if (originalProperties.has(prop)) {
throw new Error(`target already has property ${prop}`);
}
}
}
return Object.assign(target, ...sources);
}
エラーをスローする関数によってObject.assignを上書きすることができます。 Object.assignに現在エラーをスローするように指示するパラメータはありません。
Object.assign = function() {
// check in arguments if property class
throw "Error";
}
おそらく非常に悪いアイデアは、任意のコードベースでこれを上書きする –
はい。同意する。しかし、私が言ったように、それは唯一の方法です。 –
let a = {1: '1', 2: '2', 3: '3'}
const pDummy = new Proxy(a, {
set: function(target, prop, value, receiver) {
if(target[prop] === undefined){
target[prop] = value;
// Reflect.set(target, prop, value);
return true
}
else {
throw new Error(`Already assigned property ${prop} `);
// return false;
}
}
})
const test = Object.assign(pDummy, {4:'4', 5: '5'});
console.log('test', test);
const test1 = Object.assign(pDummy, {1:'4', 8: '5'});
console.log('test1', test1);
素敵な考え方、それがうまくいくかどうかわかりませんか? –
@AlexanderMillsありがとう – zabusa
- 1. Unity 5の衝突がまだ発生しています
- 2. 衝突が発生したときにオブジェクトを削除する
- 3. 名前の衝突
- 4. URLEncoderとの名前の衝突が可能ですか
- 5. 衝突が発生する前に、何人の学生がハッシュテーブルに入れられますか?ハッシュ衝突の確率を説明しながら
- 6. 球を拡大するとオーバーラップする衝突が発生する
- 7. Objective-C - 同じライブラリの異なるバージョンで名前の衝突が発生する
- 8. ビューに名前を付けるとエラーが発生するCS0426
- 9. スーパービューのエッジにUITableViewを制限するとレイアウトの衝突が発生する
- 10. Genericの名前の衝突
- 11. UserNamePasswordValidator:DIとフレームワークが衝突するとき
- 12. 名前空間が2つの大きなライブラリと衝突する
- 13. QMLの名前衝突を避ける
- 14. d3.timeDay.every(ステップ)が毎月リセットされ、軸ラベルの衝突が発生する
- 15. ScrollViewがUItableviewと衝突する
- 16. Ammonite classpathがGithub4sと衝突する(java.lang.AbstractMethodError)
- 17. アンドロイドのレイアウトがレイアウトと衝突する
- 18. PyQt:setCentralWidgetがQPushButton関数と衝突する
- 19. CloudFrontとIPアドレスが衝突する
- 20. Spring @CacheableとSimpleKeyGeneratorを使用すると衝突が発生する可能性があります
- 21. ボールの衝突の問題、ボールの半分だけが衝突している
- 22. Djangoカスタムユーザモデル投げSystemCheckError - 'username'フィールドが 'username'という名前と衝突します
- 23. キャンバスに衝突するとボールの衝突が一緒になる5
- 24. 衝突が発生したときにPygame Spritesが破壊されない
- 25. 一度だけ衝突/衝突を検出する
- 26. Rails-3の名前空間コントローラでエラーが発生する
- 27. sqoopインポートクエリで重複した名前エラーが発生する
- 28. 動的OBB衝突検出(分離軸定理):衝突が発生した時間を見つける
- 29. LibGdx Javaで完璧な衝突が発生しました
- 30. 補間オブジェクトの衝突が発生しました
は、あなたの質問 – Krishjs
'Object.assign'を使用する大きな理由を説明するためにいくつかのコードを追加します。これは
Object.assign()
の動作ではありませんので、別の名前で新しい関数であることが適切と思われます不変性のために新しいプロパティの代わりに既存のプロパティをオーバーライドすることです... – Li357プロキシオブジェクトを使用できますか? – zabusa