有没有办法使用Object.assign,以便在存在冲突的顶级属性时抛出错误?或者我们必须手动编写我们的功能吗?
答案 0 :(得分:4)
有没有办法使用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);
}
答案 1 :(得分:1)
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);
答案 2 :(得分:0)
您可以通过抛出错误的函数覆盖Object.assign。没有参数告诉Object.assign当前抛出错误。
numpy.seterr(all='raise')