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 );
}
现在我也可以调用函数而不传递参数