从js中作为函数参数传递的对象中解包字段



const user = {
id: 42,
displayName: 'jdoe',
fullName: {
fname: 'John',
lname: 'Doe'
}
};
function whoIs({
fullName: fn = {
fname: "john",
lname: "doe"
}
}) {
console.log(`${fn.fname} ${fn.lname}`);
}
whoIs(user);

让我们假设我在多个函数参数中解构了用户对象,我想将fname属性更改为firstName,但我不想更改所有函数的实现。

user.fullName.firstName = user.fullName.fname;
delete user.fullName.fname;

我怎样才能解包用户,这样我只需要改变函数参数?

您不能在参数列表中解构fname属性,而只能解构fullName属性。所以你不能改变fname属性名而不改变你的功能的实现。

您可以像这样解构和重命名属性:

其中fname解构并重命名为firstName,lname解构并重命名为lastName

const user = {
id: 42,
displayName: "jdoe",
fullName: {
fname: "John",
lname: "Doe",
},
};
function whoIs({ fullName: { fname: firstName, lname: lastName } }) {
console.log(firstName, lastName);
}
whoIs(user)

这解决了我的问题

function whoIs({
displayName:dn="jdoe",
fullName:{firstName: fname = "john",lname = "doe"}={}
} = {}) {
console.log(dn+" "+fname+" "+lname );
}

现在我也可以调用函数而不传递参数

最新更新