Вы можете использовать геттеры вместо общей функции get
. Это позволит распаковать, а также упростит чтение остального кода:
let SomeObj = {
get db() {
return "this is db";
}
}
function func({db}) {
console.log('DB', db);
}
func(SomeObj);
Если ваши свойства динамичны, вы можете сделать ужасную вещь, как это:
let SomeObj = {
get(name) {
return `this is ${name}`;
}
}
function func(o, {db = o.get('db'), blah = o.get('blah')} = {}) {
console.log('DB', db);
console.log('blah', blah);
}
func(SomeObj);
, но более реалистичным вариантом было бы иметь функцию, отображающую get
на массив реквизитов:
let SomeObj = {
get(name) {
return `this is ${name}`;
}
}
let extract = (obj, ...props) => props.map(p => obj.get(p));
function func(o) {
let [db, blah] = extract(o, 'db', 'blah')
console.log('DB', db);
console.log('blah', blah);
}
func(SomeObj);
Наконец, вы можете обернуть свой объект в Proxy
, чтобы получить динамический геттер, и в этом случае простое разрушение будет работать из коробки:
let SomeObj = new Proxy({}, {
get(obj, name) {
if(name in obj)
return obj[name];
return `this is ${name}`;
}
});
function func({db, blah}) {
console.log('DB', db);
console.log('blah', blah);
}
func(SomeObj);